在处理项目时,我遇到了以下两种列表形式:
1)
l1=[10]*2
p1,p2=l1
2)
l2=[]
for i in xrange(2):
l2.append(10)
p1,p2=l2
两者似乎都具有相同的输出(与l1=l2
中的输出一样),但是当我打印一些图形时,它们是不相同的,因此必须有某些东西。任何帮助或建议,我们将不胜感激。上面的代码是一个最小的工作示例。
答案 0 :(得分:0)
第一个表示对象不会每次都被重新评估,但是数字始终引用一个新对象,因此这没有任何作用。但是,请采取以下措施:
l = [[0] * 3] * 3
这将使一个包含3个零的3个列表完整的列表。现在尝试更改一个元素:
l[0][0] = 1
>>> l[0]
[1, 0, 0]
>>> l[1]
[1, 0, 0]
您看到它也影响了其他列表。这是因为要相乘的列表引用的是同一对象。但是您的示例具有适当的for循环,可以重新评估每个对象并可以节省调试问题
您还可以执行以下操作,为什么会重新评估对象。
l = [0 for _ in range(3)]