gpt4 book ai didi

Python:在迭代时将元素添加到列表中

转载 作者:IT老高 更新时间:2023-10-28 20:36:16 24 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

你为什么不直接用惯用的 C 方式来做呢?这应该是防弹的,但不会很快。我很确定在 Python 中对列表进行索引会遍历链表,所以这是一个“Shlemiel the Painter”算法。但我倾向于不担心优化,直到明确代码的特定部分确实是一个问题。首先让它工作;如有必要,请考虑让它变快。

如果你想遍历所有元素:

i = 0  
while i < len(some_list):
more_elements = do_something_with(some_list[i])
some_list.extend(more_elements)
i += 1

如果您只想遍历列表中最初的元素:

i = 0  
original_len = len(some_list)
while i < original_len:
more_elements = do_something_with(some_list[i])
some_list.extend(more_elements)
i += 1

关于Python:在迭代时将元素添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3752618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com