小编典典

迭代时如何从列表中删除项目?

all

我正在迭代 Python 中的元组列表,如果它们满足某些条件,我会尝试将它们删除。

for tup in somelist:
    if determine(tup):
         code_to_remove_tup

我应该用什么代替code_to_remove_tup?我不知道如何以这种方式删除该项目。


阅读 99

收藏
2022-02-28

共1个答案

小编典典

您可以使用列表推导创建一个仅包含您不想删除的元素的新列表:

somelist = [x for x in somelist if not determine(x)]

或者,通过分配给 slice somelist[:],您可以改变现有列表以仅包含您想要的项目:

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

如果有其他参考somelist需要反映更改,则此方法可能很有用。

除了理解,您还可以使用itertools. 在 Python 2 中:

from itertools import ifilterfalse
somelist[:] = ifilterfalse(determine, somelist)

或者在 Python 3 中:

from itertools import filterfalse
somelist[:] = filterfalse(determine, somelist)
2022-02-28