我是Python初学者,没有任何编程经验。 如果这个问题听起来太蹩脚,我会提前道歉,但我有些困惑。它与将特定列表(l2)添加到空列表(l1)有关。 我想要做的是增加每个" l2"每次迭代中的元素,然后将其添加到l2 list.Here是代码:
l1 = []
l2 = [0,1,2,3]
for i in range(3):
l2[0] = l2[0] + 1
l2[1] = l2[1] + 1
l2[2] = l2[2] + 1
l2[3] = l2[3] + 1
print l2
l1.append(l2)
print l1
这是我得到的打印结果:
[1, 2, 3, 4]
[2, 3, 4, 5]
[3, 4, 5, 6]
[[3, 4, 5, 6], [3, 4, 5, 6], [3, 4, 5, 6]]
为什么l2列表看起来不像这样:
[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
? 谢谢你的回复。
答案 0 :(得分:5)
这是因为您每次都附加相同的列表对象。您需要在附加列表对象之前复制它,以便确定附加了另一个对象。
l1.append(l2[:])
答案 1 :(得分:4)
这是因为当您将l2
追加到l1
时,您实际上是在保持对同一列表的引用。因此,当您修改l2
时,该实例与附加到l1
的实例相同,因此也会进行修改。你应该这样做:
for i in range(3):
l2[0] = l2[0] + 1
l2[1] = l2[1] + 1
l2[2] = l2[2] + 1
l2[3] = l2[3] + 1
print l2
l1.append(l2[:])
>>> print l1
[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
这里,[:]
称为列表拼接。它遵循以下格式:[a:b]
其中a
是列表的起始索引,b
是字符串的结束索引(排除)。如果不指定任何参数,[:]
实际上会创建列表的副本并附加副本。
>>> a = ['a', 'b', 'c', 'd', 'e']
>>> print a[2]
c
>>> print a[:]
['a', 'b', 'c', 'd', 'e']
>>> print a[2:4]
['c', 'd']
>>> print a[:3]
['a', 'b', 'c']
>>> print a[1:]
['b', 'c', 'd', 'e']
答案 2 :(得分:1)
因为您要添加列表l2本身,而不是它的副本。这就是为什么,在循环结束时打印它时,会得到一个包含最后l2值的列表。
您可以使用以下技巧创建l2的副本,然后将其添加到l1:
l1.append(l2[:])