Python:列表输出列表
我正试着列出5张清单 我是通过Python:列表输出列表,python,list,Python,List,我正试着列出5张清单 我是通过web=[]]*5 现在我想用值1和2更新“列表列表”中的第一个列表 web[0].append(1) web[0].append(2) 但我的输出是 [[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]] 但是第一个列表不应该只更新吗? 我想要的输出如下 [[1, 2], [], [], [], [], [], [], [], [], []] 这样创建列
web=[]]*5
现在我想用值1和2更新“列表列表”中的第一个列表
web[0].append(1)
web[0].append(2)
但我的输出是
[[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2]]
但是第一个列表不应该只更新吗?
我想要的输出如下
[[1, 2],
[],
[],
[],
[],
[],
[],
[],
[],
[]]
这样创建列表只会创建重复项。您可以这样创建:
n = 5 #range
web = [[] for _ in range(n)]
web[0].append(1)
web[0].append(2)
print(web)
输出:
[
[1, 2],
[],
[],
[],
[]
]
创建
web=[[]]*5
时,实际上是在创建对同一对象的引用数组(一个[]的列表)。因此,当您通过一个引用更改对象时,将更改列表中的所有条目
对于初学者来说,这是一个非常常见的Python“gotcha”
请尝试以下方法:
web = [[] for x in xrange(5)]
他正在复制同一个数组,这是因为他试图初始化数组,所以任何附加到其中一个列表的内容都将附加到所有列表中,因为它们是同一个对象。你说得对。我编辑了我的答案。你能给我指一个参考资料来解释我的答案吗this@ReynardAsis签出而不是回答“common Python'gotcha'”并链接到规范页面,您可以将问题标记为重复的闭包。这减少了碎片并使站点更易于使用。