python2.4 generator expression > python2.3 list expression
Peter Otten
__peter__ at web.de
Mon Feb 21 03:14:05 EST 2005
snacktime wrote:
> I need to convert a generator expression to a list expression so it
> will work under python 2.3.
>
> I rewrote this:
>
> for c in range(128):
> even_odd = (sum(bool(c & 1<<b) for b in range(8))) & 1
>
> As this:
>
> for c in range(128):
> bo = [bool(c & 1<<b) for b in range(8)]
> even_odd = sum(bo) & 1
>
>
> Seems to work, is there a better way to do this?
Summing over zeros seems pointless, so
>>> for c in range(128):
... print len([1 for b in range(8) if c & 1 << b]) & 1,
...
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1
1 0 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 0 1 1 0
1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0
0 1 0 1 1 0 0 1 1 0 1 0 0 1
The same simplification works for genexps, but you have to use sum() there
instead of len(). Another optimization would be to precalculate the
bitmasks [1 << b for b in range(8)] outside the loop.
Peter
More information about the Python-list
mailing list