习惯上否定过滤器

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无论如何都不需要使用

如果有人想知道,我在尝试根据条件分割列表时偶然发现了这一点

Lac*_*ack 7

所述itertools模块包括IFilter的()ifilterfalse() ,其中过滤器元件,其中该函数返回TrueFalse分别.

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()是补充.

  • 有谁知道作者为什么选择“ifilterfalse”而不是“ireject”? (2认同)