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