python用filter求素数不懂
题目描
用filter求素数
题目来源及自己的思路
廖雪峰网站的一个例子,小白问下 n = next(it) 这行,it的初始值应该是3,赋值给n也是3,在下面的过滤器不把it里面的3过滤掉了吗?
还有 n = next(it) 这行怎么返回第一个数的。
相关代码
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) # 构造新序列
打印1000以内的素数:
for n in primes():
if n < 1000:
print(n)
else:
break
麻烦大家解答清楚点,小白填坑中
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
_odd_iter()
返回一个奇数生成器(generator)这个应该没啥问题,因为非2的偶数不可能为素数。核心代码primes()
实际上用的是埃拉托斯特尼筛法,filter
就是排除能被前面的素数整除的数,剩下的就是素数了。这个实际上会嵌套很多层,初始
it
中只返回奇数,第二层it
将在奇数外面再加了一层过滤,即不能被 3 整除,第三层在第二层基础上又加了一层过滤,不能被 5 整除。。。。。