关于python:在迭代时删除列表元素

Deleting list elements whilst iterating over it

本问题已经有最佳答案,请猛点这里访问。

我需要在遍历列表时从列表中删除元素(我不能创建一个新列表,因为它在我无法控制的代码中被引用)。

我想到的最好办法是:

1
2
3
4
last_index = len(somelist) - 1
for (index,item) in enumerate(reversed(somelist)):
    if somecondition(item):
        del somelist[last_index - index]

有更好的选择吗?我也看过这篇文章和这篇文章,但是所提供的解决方案都没有那么高效或简洁(imho)。


你可以使用列表理解+切片分配,这当然更简洁——我不知道效率如何(尽管我希望它在这方面做得更好,因为你不需要每次删除一个项目时都在列表中移动元素…)

1
somelist[:] = [ x for x in somelist if not somecondition(x) ]