Python过滤器的基本用途

示例

要filter基于某些条件丢弃序列的元素:

names = ['Fred', 'Wilma', 'Barney']

def long_name(name):
    return len(name) > 5

Python 2.x 2.0
filter(long_name, names)
# 换下:['Barney']

[name for name in names if len(name) > 5] # 等效列表理解
# 换下:['Barney']


from itertools import ifilter
ifilter(long_name, names)       # 作为生成器(类似于python3.xfilter内置)
# Out: <itertools.ifilter at 0x4197e10>
list(ifilter(long_name, names)) # 等效于带有列表的过滤器
# 换下:['Barney']

(name for name in names if len(name) > 5) # 等效生成器表达式
# Out: <generator object <genexpr> at 0x0000000003FD5D38>
Python 2.x 2.6
# 除了旧版python2.xversions的选项之外,还有一个future_builtin函数:
from future_builtins import filter
filter(long_name, names)       # 与itertools.ifilter相同
# Out: <itertools.ifilter at 0x3eb0ba8>
Python 3.x 3.0
filter(long_name, names)        # 返回一个生成器
# Out: <filter at 0x1fc6e443470>
list(filter(long_name, names))  # 投到清单
# 换下:['Barney']

(name for name in names if len(name) > 5) # 等效生成器表达式
# Out: <generator object <genexpr> at 0x000001C6F49BF4C0>