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

在python中,如何将项目附加到列表中的列表?,python,list,Python,List,好的,首先检查以下代码: 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,它一直遇到麻烦,直到我找到了原因,你可以从

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

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
创建这样的列表,因为它的长度每次都不同,但是我如何将一个项目附加到列表中的单独列表中,而不会陷入这样的混乱呢?

对于您来说,第一个问题:这是因为在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], []]

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

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

我重复了几次打印“Demo2:”,Demo2,我发现在线第一行不起作用,后续行起作用了,奇怪的Huhs应该出现在下一周的时事通讯中:)谢谢,伙计,问题解决了。虽然我仍然不明白为什么它会被设计成这样。对我来说,使用
Demo2=[[]]*2
创建重复内容是没有意义的。