SimplePrograms challenge
Steven Bethard
steven.bethard at gmail.com
Tue Jun 12 19:09:23 EDT 2007
Steve Howell wrote:
> --- George Sakkis <george.sakkis at gmail.com> wrote:
>> from itertools import count, ifilter
>> def sieve():
>> seq = count(2)
>> while True:
>> p = seq.next()
>> seq = ifilter(p.__rmod__, seq)
>> yield p
[snip]
> Is there a way to broaden the problem somehow, so that
> it can be a longer solution and further down on the
> page, and so that I can continue to enforce my
> somewhat arbitrary rule of ordering examples by how
> long they are?
How about we just comment it better?
import itertools
def iter_primes():
# an iterator of all numbers between 2 and +infinity
numbers = itertools.count(2)
# generate primes forever
while True
# generate the first number from the iterator,
# which should always be a prime
prime = numbers.next()
yield prime
# lazily remove all numbers from the iterator that
# are divisible by prime we just selected
numbers = itertools.ifilter(prime.__rmod__, numbers)
I think that's 17-ish, though you could shrink it down by removing some
of the spaces.
STeVe
More information about the Python-list
mailing list