【问题标题】:list append issue inside "for" loop [duplicate]在“for”循环中列出附加问题[重复]
【发布时间】:2020-08-11 17:18:14
【问题描述】:

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

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)

但问题还是一样:

【问题讨论】:

    标签: python for-loop arraylist append infinite-loop


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您不应该在迭代容器时更改它的结构。在这里,您在迭代时添加到 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
      

      【讨论】:

        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-22
        • 2020-03-26
        • 2011-08-09
        相关资源
        最近更新 更多