filter()函数
高阶函数——filter()
1. filter()函数用于过滤序列,作用是从一个序列中筛选出符合条件的元素。
2. filter()把传入的函数一依次作用于每个元素,然后根据返回值是 True 还是 False 来判断是否留下该元素。
3. filter()函数第一个参数接收一个函数,第二个参数接收一个序列。
4. filter()函数返回的是一个 Iterator,也就是一个惰性序列,所以只有在取 filter()结果的时候,才能真正的筛选并每次返回下一个筛选出的元素。
例如,选出一个序列中的奇数:
>>> def is_odd(n): return n%2==1 >>> f=filter(is_odd,[1,2,3,4,5,6,7,8,9,10]) >>> f <filter object at 0x00000233C46F2670>
#filter()函数返回的是一个惰性序列,所以要强迫filter()
完成计算结果,需要用list()
函数获得所有结果并返回list >>> list(f) [1, 3, 5, 7, 9]
把一个序列中的空字符串删掉:
>>> def not_empty(s):
return s and s.strip()
>>> list(filter(not_empty,['a','','b',None,'c',' ']))
['a', 'b', 'c']
5. 用 filter()求素数
埃氏筛法:
def _int_iter():#生成器生成从3开始的无限奇数序列
n = 1
while True:
n = n + 2
yield n
def _not_divisible(n):#定义筛选函数
return lambda x:x % n > 0
def primes():
yield 2 #先返回一个2
it = _int_iter() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(_not_divisible(n), it) # 构造新序列
for n in primes():#构造循环条件,使之可以输出任何范围的素数序列
if n < 1000:
print(n)
else:
break