我正在尝试解决一个包含与此相似的代码部分的问题。但是,每当我尝试执行脚本时,结果就是一个无限循环。此问题的原因是什么,如何解决?
a=[1,2]
for i in a:
a.append(i)
print("Infinite")
我在计算机和Google Colab上都在本地尝试了该程序,但在两种情况下都可以。但是,不是将值1、2附加到列表a
,它的工作方式有所不同。
我通过分配a
创建了z=a
的副本,并像这样更改了for
循环的结构:
z=a
for i in z:
a.append(i)
但是问题仍然相同:
迭代时,您不应更改容器的结构。在这里,您要在a
的末尾进行迭代。这将永远持续下去。
您尝试修复它的方向正确。但问题是,z=a
没有创建列表的副本。它会创建对同一列表的新引用。
您需要显式复制:
z=a[:] # Copy via slice notation
for i in z:
a.append(i * 2) # I altered this a bit
或者,只是做惯用的事情,并使用列表理解来创建更改的副本:
z = [i * 2 for i in a]
循环的每次迭代都发生了什么,新值将添加到列表a
。这意味着每次迭代后列表中总会有一个新元素,这意味着循环将永远不会结束。
关于您的a
副本,并不能完全创建a
的副本。 z=a
仅引用变量a
,因此修改z
也会修改a
。