【问题标题】:Python: Adding element to list while iteratingPython:在迭代时将元素添加到列表中
【发布时间】:2023-04-02 14:30:01
【问题描述】:

我知道在迭代列表时不允许删除元素,但是否允许在迭代时将元素添加到 python 列表中。这是一个例子:

    for a in myarr:
      if somecond(a):
          myarr.append(newObj())

我已经在我的代码中尝试过,它似乎工作正常,但我不知道是不是因为我很幸运,它会在未来的某个时候中断?

编辑:我不想复制列表,因为“myarr”很大,因此它太慢了。我还需要用“somecond()”检查附加的对象。

编辑:在某些时候“somecond(a)”会是假的,所以不可能有无限循环。

编辑:有人询问“somecond()”函数。 myarr 中的每个对象都有一个大小,每次 "somecond(a)" 为真并且将一个新对象附加到列表中时,新对象的大小都会小于 a。 “somecond()” 有一个 epsilon 来表示对象可以有多小,如果它们太小,它将返回“false”

【问题讨论】:

  • 复制列表不需要太多时间。这是浅拷贝,不是深拷贝。
  • @S.Lott:列表很容易超过一亿个元素,上面的循环重复了很多次。即使是浅拷贝也会很慢。
  • 既然你说你已经这样做了,你的循环是否会遍历附加的项目以及列表中的原始项目?
  • @WesDec:您似乎在谈论广度优先搜索。一个简单的列表不适合你正在做的事情。这听起来像某种树。不是一个简单的列表。
  • @WesDec:另外,不要添加 cmets 道歉。只需专注于正确回答问题。

标签:
python
iteration