Python filterfalse()和filter()过滤方法

Python filterfalse()和filter()过滤方法前面用到了filter()函数,可以基于它定义itertools模块中的filterfalse()函数,如下所示:

filterfalse = (lambda pred, iterable:
    filter(lambda x: not pred(x), iterable)
)

基于filter()函数定义意味着谓词函数可以是None。函数filter(None, iterable)返回可迭代对象中的所有真值,函数filterfalse(None, iterable)则返回所有非真值。

>>> filter(None, [0, False, 1, 2])
>>> list(_)
[1, 2]

>>> filterfalse(None, [0, False, 1, 2])
<itertools.filterfalse object at 0x101b43a50>
>>> list(_)
[0, False]

使用filterfalse()函数意在提高代码复用性。使用这个简洁的函数,可以方便地将输入数据分为“通过”和“舍弃”两组,而无须使用逻辑非这种繁复的表达方式。

该思想体现如下:

iter_1, iter_2 = iter(some_source), iter(some_source)
good = filter(test, iter_1)
bad = filterfalse(test, iter_2)

显然,这会包含输入数据中所有的值。test()函数无须变动,从而避免了误用括号造成难以察觉的逻辑错误。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程