在for循环中创建新列表

时间:2014-06-01 09:27:57

标签: python

我正在尝试通过使用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]] 我犯了什么错误?

2 个答案:

答案 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并逐行运行代码,正确理解。