genexp surprise (wart?)

Paul Rubin http
Fri May 26 01:53:36 EDT 2006


Paul Rubin <http://phr.cx@NOSPAM.invalid> writes:
> Yeah, it's just counterintuitive is all.  I guess the natural way to
> express this would have been with tail recursion instead of a while
> loop.

FWIW, here's a listcomp version:

    def s2(n=100):
        stream = range(2,n)
        while stream:
            p = stream[0]
            yield p
            stream = [s for s in stream if s%p != 0]

    print list(s2(100))

This should have the same space consumption and approx. running time
as the classic sieve.  The genexp version actually used O(n/log(n))
space instead of linear space, I think.



More information about the Python-list mailing list