好的,请先检查以下代码:
Demo1 = [[], []]
Demo2 = [[]] * 2
Demo1[0].append(1)
Demo2[0].append(1)
print "Demo1: ", Demo1
print "Demo2: ", Demo2
这是输出:
Demo1: [[1], []]
Demo2: [[1], [1]]
我需要创建一个列表,其项目都是列表,就像Demo1
和Demo2
一样,当然我在我的脚本中使用Demo2
并且它一直遇到麻烦直到我找到了你可以从上面的代码中看到的原因。那为什么会这样呢?大多数情况下我会使用Demo2
来创建这样的列表,因为它的长度每次都不同,但是如何将一个项目附加到列表中的单独列表而不会陷入混乱?
答案 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)]