列出 "for" 循环内的追加问题

list append issue inside "for" loop

我试图解决一个包含与此类似的代码部分的问题。但是每当我尝试执行脚本时,它就会变成一个无限循环。出现这个问题的原因是什么,我该如何解决?

a=[1,2]
for i in a:
  a.append(i)
  print("Infinite")

我在我的计算机和 Google Colab 上本地尝试了这个程序,但在这两种情况下。但它不是将值 1、2 附加到列表 a,而是以不同的方式工作。

我通过分配 z=a 创建了 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)

或者只是 extend a 本身:

a.extend(a)
print(a)  # [1, 2, 1, 2]

或相乘:

a *= 2

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

至于您的 a 副本,这并不完全是 a 的副本。 z=a 只是引用变量 a,因此修改 z 也会修改 a.