gon*_*opp 5 python functional-programming filter negation
filter用否定来写一个最惯用的方法是什么?
例:
is_even= lambda x : x % 2 == 0
odd_numbers= filter( lambda x: not is_even(x), range(10) )
Run Code Online (Sandbox Code Playgroud)
当然,你可以使用列表推导 - 但是你filter无论如何都不需要使用
如果有人想知道,我在尝试根据条件分割列表时偶然发现了这一点
所述itertools模块包括IFilter的()和ifilterfalse() ,其中过滤器元件,其中该函数返回True与False分别.
odd_numbers = ifilterfalse(is_even, range(10))
Run Code Online (Sandbox Code Playgroud)
请注意,在Python 2中,filter和之间存在差异ifilter:odd_numbers这里将是一个迭代器,而filter()将给出一个列表(请参阅itertools.ifilter Vs.过滤器与列表推导).如果你真的想要建立一个列表,你的例子not看起来很好,假设你已经开始使用filter- 列表理解可能更"惯用"(列表过滤:列表理解与lambda +过滤器).
在Python 3中,filter()构造一个迭代器而不是一个列表,而itertools.filterfalse()是补充.