While not nearly the shortest proposed thus far, I'm fond of:

from itertools import count, ifilter
def sieve(s=count(2)):
  while 1:p=s.next();s=ifilter(p.__rmod__,s);yield p

It will generate quite a large number of primes before blowing up (at 
least 50,000 primes, p=611,957) and it's much faster than the other 
submissions thus far that can generate a more or less arbitrary number 
of primes. It's still much slower than Alex Martelli's version in the 
cookbook though.

[And yes I know that you can shave off one character by importing 
ifilter as i, but that's too much ick for too little gain. There may 
well be other, more fruitful ways to compact it though]

-tim

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to