python循环时从列表中删除项目

一、概述

我正在遍历Python中的元组列表,并尝试在满足特定条件的情况下将其删除。

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

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

二、详解

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

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)

为了清楚起见,以及对于那些发现使用[:]黑变或模糊表示法的人,这里有一个更明确的选择。从理论上讲,它在空间和时间上的表现应该与上面的单层表现相同。

temp = []
while somelist:
    x = somelist.pop()
    if not determine(x):
        temp.append(x)
while temp:
    somelist.append(templist.pop())

它也可以在其他语言中运行,而这些语言可能不具有Python列表替换项功能,而只需进行很少的修改即可。例如,并非所有语言都False像Python一样将空列表转换为。您可以替换while somelist:更明确的内容,例如while len(somelist) > 0:

如若转载,请注明出处:https://www.javaidea.cn/article/8438.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。