python素数生成器_在python中用滤波器和生成器生成无穷素数

这不仅仅是一行代码,而是这行代码重复运行,具有不同的n值。在

{cd2>基本上还没有排除素数迭代的候选数。你先把所有的奇数作为候选。在it = _odd_iter()

然后你反复地选择剩下的第一个候选人

^{pr2}$

去掉所有那个候选人的倍数filter(_not_divisible(n), it)

把你的候选素数替换成去掉倍数后剩下的所有素数。在it = ...

如果假设filter返回一个数字列表,而不是iterable,并且假设_odd_iter()返回奇数列表而不是iterable,则可以跟踪循环并确定列表中每一点的内容。例如,运行后it = _odd_iter()

你从it = 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ...

那就跑吧n = next(it) # 3

它把前面的第一个项目拉下来,留给你it = 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ...

然后跑it = filter(_not_divisible(3), it)

过滤掉3的所有倍数it = 5, 7, 11, 13, 17, 19, 23, 25, ...

然后回到循环的顶部,从前面拉出新的第一个数字n = next(it) # 5

离开it = 7, 11, 13, 17, 19, 23, 25, ...

然后过滤掉5的所有倍数it = filter(_not_divisible(5), it)

这给了it = 7, 11, 13, 17, 19, 23, ...

等等。在

实际上,由于filter()返回的是迭代器,而不是列表,因此最终得到的是迭代器的嵌套序列。特别是,你要从it = _odd_iter()

在循环的第一次迭代之后,基本上it = filter(_non_divisible(3), _odd_iter())

除了3是从迭代器中获取的,然后在循环的第二次迭代之后it = filter(_non_divisible(5), filter(_non_divisible(3), _odd_iter()))

除了5也从迭代器中获取,然后it = filter(_non_divisible(7), filter(_non_divisible(5), filter(_non_divisible(3), _odd_iter())))

等等。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值