Python高级函数(二)

filter()

Python内建的filter()函数用于过滤序列。
和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

>>> def odd(n):
	return n % 2 == 1
>>> list(filter(odd,[1,3,5,6,7,8,14,27]))
[1, 3, 5, 7, 27]

还可以把一个字符串中的空字符删掉:

>>> def empty(s):
	return s and s.strip()
>>> list(filter(empty,['a','','c',None,' ']))
['a', 'c']

可见用 filter()这个高阶函数,关键在于正确实现一个“筛选”函数。
注意到 filter()函数返回的是一个 Iterator,也就是一个惰性序列,所
以要强迫 filter()完成计算结果,需要用 list()函数获得所有结果并返
回 list。
用 filter 求素数:

def _odd_iter():
 	n = 1
 	while True:
 		n = n + 2
 		yield n

注意这是一个生成器,并且是一个无限序列。
然后定义一个筛选函数:

def _not_divisible(n):
	return lambda x: x % n > 0

最后,定义一个生成器,不断返回下一个素数:

def primes():
    yield 2
    it = _odd_iter() # 初始序列
    while True:
        n = next(it) # 返回序列的第一个数
        yield n
        it = filter(_not_divisible(n), it) # 构造新序列

由于 primes()也是一个无限序列,所以调用时需要设置一个退出循环。

发布了37 篇原创文章 · 获赞 42 · 访问量 4506

猜你喜欢

转载自blog.csdn.net/qq_43337175/article/details/104391410