(Python 3.5.1)
I'm trying to use Sympy for some Project Euler problems, but I came across something strange about how set(sympy.primerange(a, b))similar constructs work.
>>> import sympy
>>> PR = sympy.primerange(1, 20)
>>> set(PR)
{2, 3, 5, 7, 11, 13, 17, 19}
So far so good. But:
>>> import sympy
>>> PR = sympy.primerange(1, 20)
>>> set(PR)
{2, 3, 5, 7, 11, 13, 17, 19}
>>> set(PR)
set()
The call just PRgives me <generator object primerange at 0x039C1720>after the call list(PR)once or twice. The same thing happens with for p in PR: print(p)and list(PR).
Why this does not work:
>>> 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>
Why don't we get the kit {2, 3, 5, 7, 11, 13, 17, 19}?