以下2种方法有什么区别?

时间:2018-09-07 17:44:51

标签: python list

在处理项目时,我遇到了以下两种列表形式:

1)

l1=[10]*2
p1,p2=l1

2)

l2=[]
for i in xrange(2):
   l2.append(10)
p1,p2=l2

两者似乎都具有相同的输出(与l1=l2中的输出一样),但是当我打印一些图形时,它们是不相同的,因此必须有某些东西。任何帮助或建议,我们将不胜感激。上面的代码是一个最小的工作示例。

1 个答案:

答案 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)]