我需要创建list1,其中包含另一组包含8个元素的列表。然后将这些附加到第二个列表,其中最后一个元素被更改。 我有点困惑,因为当我尝试更改最后一个元素时,它会更改两个列表的最后一个元素。
对此的任何帮助都将非常感激:
from random import random
list1 = []
list2 = []
for x in xrange(10):
a, b, c, d, e, f, g = [random() for i in xrange(7)]
list1.append([x, a, b, c, d, e, f, g])
for y in xrange(len(list1)):
list2.append(list1[y])
print "Index: ", y, "\tlist1: ", list1[y][7]
print "Index: ", y, "\tlist2: ", list2[y][7]
list2[y][7] = "Value for list2 only"
print "Index: ", y, "\tlist1: ", list1[y][7]
print "Index: ", y, "\tlist2: ", list2[y][7]
答案 0 :(得分:1)
替换:
list2.append(list1[y])
使用:
list2.append(list1[y][:])
原始代码的问题是python没有将list1[y]
的数据附加到list2
的末尾。相反,python附加了一个指向list1[y]
的指针。更改两个地方的数据,因为它是相同的数据,所以两个地方都会出现更改。
解决方案是使用list1[y][:]
告诉python复制数据。
如果没有列表列表,您可以更简单地看到此效果:
>>> a = [0, 1, 2, 3, 4, 5, 6, 7]
>>> b = a
>>> b[0] = 99
>>> a
[99, 1, 2, 3, 4, 5, 6, 7]
相比之下:
>>> a = [0, 1, 2, 3, 4, 5, 6, 7]
>>> b = a[:]
>>> b[0] = 99
>>> a
[0, 1, 2, 3, 4, 5, 6, 7]