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
Post a Comment