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

  

 

posted @ 2020-12-30 13:13  CannedDream  阅读(8589)  评论(0编辑  收藏  举报