一、概述
我正在遍历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