python为多个数组

时间:2015-12-20 11:02:39

标签: python arrays

我的问题是:

假设我有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

知道为什么,我该怎么做才能解决它?

提前致谢。

2 个答案:

答案 0 :(得分:2)

根据您对症状的描述,我猜你会定义这样的列表:

arr0

在这种情况下,arr1[xyz]*2都会引用完全相同的列表,因为[xyz, xyz]会生成列表xyz,其中[arr0[0], arr1[0]] = [10, 20] 1}}是两次列出的完全相同的对象。

因此,当Python遇到arr0[0] = 10 时,它首先分配

arr1[0] = 20

然后

arr0

但由于arr1In [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以来,最右边的作业是最后一个,因此最终会影响两个列表arr1arr0, 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