【发布时间】:2019-12-23 10:39:39
【问题描述】:
假设我们有两个值列表list1 和list2,以及两个索引列表index1 和index2。我们如何将list2 中位置为index2 的元素复制到list1 中位置为index1 的元素。例如,在 Matlab 中,我们可以简单地写成list1[index1] = list2[index2],但奇怪的是这在 Python 中似乎不起作用。另外,如果index1 和/或index2 是布尔值列表,我们该怎么做?
例如,说list1 = ['a','b','c','d','e'] 和list2 = ['A','B','C','D','E'] 和index1 = [0,1,3] 和index2 = [1,2,4],结果list1[index1] = list2[index2] 是list1: ['B','C','c','E','e']。
对于布尔值,应使用index1 = [True,True,False,True,False] 和index2 = [False,True,True,False,True] 实现相同的输出。
PS:很清楚如何使用for 循环来做到这一点。我正在寻找一种更“pythonic”的方式,例如列表理解。谢谢
PPS:经过一些实验,我定义了一个类 MyList,它继承自 Python 类的 list,并修改了 __getitem__ 和 __setitem__ 以接受整数或布尔值列表。类定义在我的帖子中给出How to extend list class to accept lists for indecies in Python, e.g. to use list1[list2] = list3[list4]
【问题讨论】:
-
只要确保两个列表的长度相同(或者目标列表更长)——你不能用
i[8] = 42来替换i = [0,1],因为没有第8 个元素可以替换。如果您从包含列表引用的列表中复制引用,还要注意列表的可变性质。在这种情况下,您不会创建不同的新列表 -
如果 index1 和/或 index2 是布尔值列表,您确定将
list2中的哪个元素复制到list1? -
@Austin 我当然试过了。我收到一个错误“TypeError:列表索引必须是整数或切片,而不是列表”
-
嗯,我没有看到
index1和index2是列表。请提供示例输入以避免混淆。 -
@Austin
list1[index1]应该是n元素的子集,list2[index2]也应该是n元素的子集,因此我们将后一个子集的值分配给前一个子集
标签: python python-3.x list