本文主要是介绍Python 埃氏筛法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
# -*- coding: utf-8 -*- # filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。# 构造一个奇数序列,排除了所有偶数,因为除了2之外的偶数都是非素数 def _odd_iter():a = 1while True:a = a + 2yield a # 首次调用返回3print('a=', a)def _not_disvisiable(b):return lambda x: x % b > 0def primes():yield 2 # 返回首个素数2it = _odd_iter() # 初始化序列while True:c = next(it) # 通过_odd_iter函数不停获取返回的值# filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。it = filter(lambda y, z=c: y % z > 0, it) # 构造新序列# it = filter(_not_disvisiable(c), it)yield c """ 一直没搞清楚这里面的运行机制,后面利用单步调试后终于理清,首先从For循环进入到primes(), 获得首个返回值2,此时打印出n=2,随后继续For循环进入到it=_odd_iter(),_odd_iter为生成器。 随后进入while循环,首个c = next(it)未获取到值,进入到_odd_iter()函数,初始化a, 进入_o
这篇关于Python 埃氏筛法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!