如何将项目附加到python列表中的列表?

时间:2011-12-22 06:06:49

标签: python list

好的,请先检查以下代码:

Demo1 = [[], []]
Demo2 = [[]] * 2
Demo1[0].append(1)
Demo2[0].append(1)
print "Demo1: ", Demo1
print "Demo2: ", Demo2

这是输出:

Demo1:  [[1], []]
Demo2:  [[1], [1]]

我需要创建一个列表,其项目都是列表,就像Demo1Demo2一样,当然我在我的脚本中使用Demo2并且它一直遇到麻烦直到我找到了你可以从上面的代码中看到的原因。那为什么会这样呢?大多数情况下我会使用Demo2来创建这样的列表,因为它的长度每次都不同,但是如何将一个项目附加到列表中的单独列表而不会陷入混乱?

2 个答案:

答案 0 :(得分:4)

对于你的第一个问题:它正在发生,因为在Demo2案例中你的列表包含同一个对象的两个副本。请参阅下面的示例,其中我打印了这些元素的内存位置,注意它们与Demo1不同但与Demo2匹配。

>>> Demo1 = [[], []]
>>> Demo2 = [[]] * 2
>>> print id(Demo1[0]), id(Demo1[1])
33980568 34018800
>>> print id(Demo2[0]), id(Demo2[1])
34169920 34169920

对于你的第二个问题:你可以使用像[[] for i in xrange(n)]这样的列表理解,以便创建一个新的列表n次,而不是重复相同的列表n次。

示例:

>>> Demo2 = [[] for i in xrange(2)]
>>> Demo2
[[], []]
>>> Demo2[0].append(1)
>>> Demo2
[[1], []]

答案 1 :(得分:2)

Demo2是一个包含对同一列表的两个引用的列表。

Demo2 = [[] for x in range(2)]