作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一个非常简单的程序:
a = [[]]*3
print str(a)
a[0].append(1)
a[1].append(2)
a[2].append(3)
print str(a[0])
print str(a[1])
print str(a[2])
这是我期待的输出:
[[], [], []]
[1]
[2]
[3]
但我却得到了这个:
[[], [], []]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
这里真的有些东西我没有得到!
最佳答案
你必须做
a = [[] for i in xrange(3)]
不是
a = [[]]*3
现在可以了:
$ cat /tmp/3.py
a = [[] for i in xrange(3)]
print str(a)
a[0].append(1)
a[1].append(2)
a[2].append(3)
print str(a[0])
print str(a[1])
print str(a[2])
$ python /tmp/3.py
[[], [], []]
[1]
[2]
[3]
当您执行类似a = [[]]*3
的操作时,您会在一个列表中得到相同的列表[]
三次。 相同 意味着当你更改其中一个时,你会更改所有它们(因为只有一个列表被引用了三次)。
你需要创建三个独立的列表来规避这个问题。你用列表理解来做到这一点。您在这里构建了一个由独立的空列表 []
组成的列表。将为 xrange(3)
的每次迭代创建新的空列表(在这种情况下,range
和 xrange
之间的区别并不那么重要;但是 xrange
稍微好一点,因为它不会生成完整的数字列表,而只是返回一个迭代器对象。
关于 python : how to append new elements in a list of list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219949/
我是一名优秀的程序员,十分优秀!