Marc 'BlackJack' Rintsch wrote: > In <[EMAIL PROTECTED]>, Alex Martelli wrote: > >> Paul Rubin <http://[EMAIL PROTECTED]> wrote: >> >>> Dan Bishop <[EMAIL PROTECTED]> writes: >>> > If you ever do, it's trivial to write your own enumerate(): >>> > def enumerate(seq): >>> > index = 0 >>> > for item in seq: >>> > yield (index, item) >>> > index += 1 >>> >>> That's a heck of a lot slower than the builtin, and if you're running it >>> often enough for sys.maxint to be an issue, you may care about the >>> speed. >> >> Perhaps itertools.izip(itertools.count(), seq) might be faster (haven't >> timed it, but itertools tends to be quite fast).
This approach is indeed much faster than the hand-crafted generator (10 vs 240% slowdown on my machine compared to the builtin) > I think correct is more important than fast. `itertools.count()` has the > same issues that `enumerate()`: > >>>> from itertools import count >>>> from sys import maxint >>>> c = count(maxint) >>>> c.next() > 2147483647 >>>> c.next() > -2147483648 > > What I find most disturbing here, is that it happens silently. I would > have expected an exception instead of the surprise. This is fixed in Python2.5: >>> from itertools import count >>> import sys >>> c = count(sys.maxint) >>> c.next(), c.next() (2147483647, 2147483648L) Peter -- http://mail.python.org/mailman/listinfo/python-list