Python filter() not working and returning TypeError? -


i have written prime generator program generates primes in range. code below:

from math import sqrt  primes = range(3, 31623, 2)  in range(len(primes)):     if primes[i] != none:         if primes[i] >= sqrt(31622):             break         x in range(i+1, len(primes)):             if primes[x] , not primes[x] % primes[i]:                 primes[x] = none  primes = [x x in primes if x]  def is_prime(x):     #if x <= 31623 , x in primes:         #return true     if x % 10 == 5 or not x % 10 or not x % 2:         return false     else:         in primes:             if not x % or >= sqrt(x):                 return false     return true   l = [x x in range(999900001, 1000000000, 2) if is_prime(x)] #l = filter(is_prime(x), range(999900001, 1000000000, 2)) print l 

the problem in last couple lines. if use list comprehension, works fine. however, if try create list of primes using filter(), python returns error:

traceback (most recent call last):   file "primes.py", line 29, in <module>     l = filter(is_prime(x), range(999900001, 1000000000, 2))   file "primes.py", line 20, in is_prime     if x % 10 == 5 or not x % 10 or not x % 2: typeerror: unsupported operand type(s) %: 'nonetype' , 'int' 

can please tell me problem is?

you should pass function filter, not call function , pass result. example -

l = filter(is_prime, range(999900001, 1000000000, 2)) 

the issue occurs because x defined none , due list comprehension -

primes = [x x in primes if x] 

then, when -

l = filter(is_prime(x), range(999900001, 1000000000, 2)) 

it first evaluates is_prime(x) (for x none) , causing issue. need send function first argument (not evaluate x).


Comments

Popular posts from this blog

c - Bitwise operation with (signed) enum value -

xslt - Unnest parent nodes by child node -

YouTubePlayerFragment cannot be cast to android.support.v4.app.Fragment -