(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}'並且可以被多次調用。 –