如何在Python中对谓词函数取反?
Python中筛选不匹配谓词元素的便捷方法
方法一:用itertools.filterfalse(最直接的标准库方案)
Python标准库的itertools模块里有个filterfalse函数,它的作用就是筛选出不满足谓词函数的元素,完全符合你的需求,不用手动取反谓词:
from itertools import filterfalse def pred(line): return someval in line my_list = ["Thanks","in","advance!"] new_list = list(filterfalse(pred, my_list)) # 转成列表,若只需迭代器可省略list()
方法二:实现通用的negate函数
如果确实需要一个类似negate的函数来反转任意谓词的结果,可以用functools.partial结合operator.not_实现,或者用你提到的lambda方式:
from functools import partial import operator def pred(line): return someval in line # 用partial实现通用negate def negate(func): return partial(lambda f, x: not f(x), func) not_pred = negate(pred) # 或者直接用lambda(你已知的方式) not_pred = lambda x: not pred(x) # 后续正常使用filter new_list = list(filter(not_pred, my_list))
补充说明
filter返回的是迭代器,若需要直接得到列表,记得用list()转换;filterfalse本质是filter的反向操作,专门处理“保留不匹配元素”的场景,代码可读性更高,推荐优先使用。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

