我正在尝试通过使用append方法更改for循环中的另一个来创建新列表。但我遇到了麻烦。
我的简单代码:
l1=[]
l2=[0,0]
for i in range(4):
l2[0]+=1
l1.append(l2)
print l2
print l1
返回:
[1, 0]
[2, 0]
[3, 0]
[4, 0]
[[4, 0], [4, 0], [4, 0], [4, 0]]
但我预计列表l1会是这样的:[[1,0],[2,0],[3,0],[4,0]] 我犯了什么错误?
答案 0 :(得分:1)
您需要附加列表的副本,而不是对它的引用。
l1.append(l2[:])
测试运行:
>>> l1 = []
>>> l2 = [0, 0]
>>> for i in range(4):
l2[0] += 1
l1.append(l2[:])
print l2
[1, 0]
[2, 0]
[3, 0]
[4, 0]
>>> l1
[[1, 0], [2, 0], [3, 0], [4, 0]]
答案 1 :(得分:1)
您要附加对列表的引用。因为,在循环结束时,l2
的值为[4,0]
,l1
中的每个列表都为[4,0]
您可以在list()
内置方法的帮助下附加列表的副本,或者使用如下所示的切片表示法
l1=[]
l2=[0,0]
for i in range(4):
l2[0]+=1
l1.append(list(l2)) # or l1.append(l2[:])
print l2
print l1
如果您无法理解这个想法,可以使用viz mode of codeskulptor并逐行运行代码,正确理解。