In test_generators.py there is a good Eratosthenes sieve Implementation :
def intsfrom(i): while 1: yield i i += 1 def firstn(g, n): return [g.next() for i in range(n)] def exclude_multiples(n, ints): for i in ints: if i % n: yield i def sieve(ints): prime = ints.next() yield prime not_divisible_by_prime = exclude_multiples(prime, ints) for p in sieve(not_divisible_by_prime): yield p primes = sieve(intsfrom(2)) >>> print firstn(primes, 20) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]

jbochi
source share