python 高阶函数filter

Python内建的filter()函数用于过滤序列。

map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

把一个序列中的空字符串删掉,可以这么写:

1 def not_empty(s):
2     return s and s.strip()
3 r = list(filter(not_empty, ['A', '', 'B', None, 'C', '   ']))
4 print(r) 

Output:   ['A', 'B', 'C']

注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

用filter求素数

计算素数的一个方法是埃氏筛法

#计算100以内的素数
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)#构造新序列
for i in primes():
    if i < 100:
        print(i)
    else:
        break

 

posted @ 2019-08-20 14:22  椰汁软糖  阅读(208)  评论(0编辑  收藏  举报