Python: set (sympy.primerange (a, b))

(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}?

+4
source share
1 answer

. sympy.primerange , . , . set() PR, .

itertools.takewhile . sympy.sieve . . sympy.sieve , takewhile - . .

Project Euler.

+3

Source: https://habr.com/ru/post/1649228/


All Articles