(Python的3.5.1)的Python:设置(sympy.primerange(A,B))
我一直在尝试使用Sympy一些项目欧拉的问题,但我已经遇到一些奇怪如何set(sympy.primerange(a, b))
和类似的建筑工作。
>>> import sympy
>>> PR = sympy.primerange(1, 20)
>>> set(PR)
{2, 3, 5, 7, 11, 13, 17, 19}
到目前为止,这么好。但是:
>>> import sympy
>>> PR = sympy.primerange(1, 20)
>>> set(PR)
{2, 3, 5, 7, 11, 13, 17, 19}
>>> set(PR)
set()
调用只需PR
给我打电话<generator object primerange at 0x039C1720>
一次list(PR)
或两次后。 for p in PR: print(p)
和list(PR)
也会发生同样的情况。
为什么这个不行:
>>> import sympy, itertools
>>> sympy.sieve.extend(100)
>>> set(itertools.takewhile(lambda p: p<20, sympy.sieve))
set()
>>> sympy.sieve
<Sieve with 25 primes sieved: 2, 3, 5, ... 89, 97>
我们为什么不拿到一套{2, 3, 5, 7, 11, 13, 17, 19}
?
谢谢。这就说得通了。在[Sympy API](http://docs.sympy.org/dev/modules/ntheory.html)中挖掘,我发现这会起作用:>>> sympy.sieve.extend(20)>> > set(sympy.sieve._list)'给出'{2,3,5,7,11,13}'并且可以被多次调用。 –