在“ for”循环中列出附加问题

问题描述 投票:0回答:2

我正在尝试解决一个包含与此相似的代码部分的问题。但是,每当我尝试执行脚本时,结果就是一个无限循环。此问题的原因是什么,如何解决?

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)

但是问题仍然相同:

enter image description here

python for-loop arraylist append infinite-loop
2个回答
0
投票

迭代时,您不应更改容器的结构。在这里,您要在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]

0
投票

循环的每次迭代都发生了什么,新值将添加到列表a。这意味着每次迭代后列表中总会有一个新元素,这意味着循环将永远不会结束。

关于您的a副本,并不能完全创建a的副本。 z=a仅引用变量a,因此修改z也会修改a

© www.soinside.com 2019 - 2024. All rights reserved.