我的问题是:
假设我有N
个数组:arr0,arr1,arr2,... arrN(编辑:实际上N+1
数组,但没关系。)
我想在同一行中插入所有数组值的第一个成员,如下所示:
[arr0[0], arr1[0], arr2[0]... arrN[0]]=[0,1,2,3....N]
我希望在此行arr0[0]
为0后,arr1[0]
将为1等。
但是,出于某种原因,发生的事情是arr0[0]=arr1[0]=arr2[0]=...=arrN[0]=N
知道为什么,我该怎么做才能解决它?
提前致谢。
答案 0 :(得分:2)
根据您对症状的描述,我猜你会定义这样的列表:
arr0
在这种情况下,arr1
和[xyz]*2
都会引用完全相同的列表,因为[xyz, xyz]
会生成列表xyz
,其中[arr0[0], arr1[0]] = [10, 20]
1}}是两次列出的完全相同的对象。
因此,当Python遇到arr0[0] = 10
时,它首先分配
arr1[0] = 20
然后
arr0
但由于arr1
和In [46]: arr0, arr1 = [[None]]*2
都引用相同的列表,因此两个列表中的第一个元素
分配到两次:
arr0
请注意,arr1
的分配会影响In [47]: arr0[0] = 10
In [48]: arr1
Out[48]: [10]
:
arr1
请注意,arr0
的分配会影响In [49]: arr1[0] = 20
In [50]: arr0
Out[50]: [20]
:
arr0
自assignments are evaluated from left to right以来,最右边的作业是最后一个,因此最终会影响两个列表arr1
,arr0, arr1 = [None], [None]
的作业。
解决问题:使用
arr0, arr1 = [[None] for i in range(2)]
或
arr0
因为在这两种情况下,arr1
和{{1}}都会被分配到不同的列表。
答案 1 :(得分:0)
您可以像这样使用enumerate
:
for index, value in enumerate([arr0, arr1, arr2... arrN]):
value[0] = index
但是当然,如果你的任何数组是一个空数组,这将失败IndexError
。要解决这个问题,您需要这样做:
for index, value in enumerate([arr0, arr1, arr2... arrN]):
if not value:
value = [index]
else:
value[0] = index
您可以阅读enumerate
here。