gpt4 book ai didi

python - Python 中 Eratosthenes 的惰性筛选

转载 作者:太空狗 更新时间:2023-10-29 22:27:46 25 4
gpt4 key购买 nike

我正在尝试在 Python 3.2 中编写一个惰性版本的埃拉托色尼筛法。这是代码:

import itertools
def primes():
candidates = itertools.count(2)
while True:
prime = next(candidates)
candidates = (i for i in candidates if i % prime)
yield prime

但是,当我迭代 primes() 时,我只得到连续的数字。例如,

print(list(itertools.islice(primes(),0,10)))

打印列表

[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

令我惊讶的是,对 primes() 的以下微小修改使其工作:

def primes():
candidates = itertools.count(2)
while True:
prime = next(candidates)
candidates = (i for i in candidates if i % prime)
next(itertools.tee(candidates)[1]) ########### NEW LINE
yield prime

我猜我遗漏了一些关于生成器参数范围的信息

candidates = (i for i in candidates if i % prime)

但我看不出如何在不添加这个看似随机的新行的情况下修复代码。有人知道我做错了什么吗?谢谢。

最佳答案

真正的修复是替换:

candidates = (i for i in candidates if i % prime)

与:

candidates = (lambda prime: (i for i in candidates if i % prime))(prime)

关于python - Python 中 Eratosthenes 的惰性筛选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6715197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com