filter函数接收两个参数:函数和序列。
作用:将函数作用于序列的每一个元素,并且根据返回值是True/False来保留/删除序列中的元素。
例如:用filter来求1~100内的素数。
可以采用这样的方法:
首先,列出从2开始的所有自然数,构造一个序列:
取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:
取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:
取新序列的第一个数5,然后用5把序列的5的倍数筛掉:
不断筛下去,就可以得到所有的素数。
先产生一个从3开始的奇数序列(因为偶数都是2的倍数)
def nums_N():
i = 3
while True:
i += 2
yield i
def sel(n):
return lambda x : x%n > 0
def primes():
yield 2
it = nums_N() #初始序列
while True:
n = next(it) #返回序列的第一个数
yield n
it = filter(sel(n), it) #构造新序列
def main():
for n in primes():
if n < 100:
print(n)
else:
break