要filter基于某些条件丢弃序列的元素:
names = ['Fred', 'Wilma', 'Barney'] def long_name(name): return len(name) > 5
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>
# 除了旧版python2.xversions的选项之外,还有一个future_builtin函数: from future_builtins import filter filter(long_name, names) # 与itertools.ifilter相同 # Out: <itertools.ifilter at 0x3eb0ba8>
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>