【发布时间】:2020-10-18 01:19:05
【问题描述】:
我想使用嵌套的 for 循环将一个列表附加到另一个列表中,但代码没有按预期工作
def apend():
ls = []
numbers = [0,0]
for num1 in range(3):
for num2 in range(2):
numbers[0] = num1
numbers[1] = num2
ls.append(numbers)
print(ls)
apend()
我希望输出是:[[0,0],[0,1],[0,2],1,0],[1,1],[1,2]]
但我得到这个输出:[[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
【问题讨论】:
-
我认为它与docs.python-guide.org/writing/gotchas/#late-binding-closures 有关。也许尝试在你的内部 for 循环中实例化
numbers。 -
您将在每次迭代中附加对同一列表的引用。只需附加
[num1, num2]即可。 -
谁能解释一下为什么这不起作用
-
ls将其作为对相同numbers的引用,但您应该在将其放入ls之前创建新的number。或执行ls.append([num1, num2])BTW:在pythontutor.com 上运行您的代码,您将在可视化上看到以箭头表示的引用 - 并且所有箭头都指向同一列表number
标签: python list loops append nested-loops