enumerate improvement proposal
Ben Finney
bignose+hates-spam at benfinney.id.au
Sun Oct 29 18:17:06 EST 2006
Ben Finney <bignose+hates-spam at benfinney.id.au> writes:
> >>> print enumerate("ABCDE")
> <enumerate object at 0xa7d642ac>
> >>> print list(enumerate("ABCDE"))
> [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E')]
>
> >> def obstinate_economist_enumerate(items):
> ... seq = [(i+1, x) for (i, x) in enumerate(items)]
> ... return iter(seq)
> ...
> >>> print obstinate_economist_enumerate("ABCDE")
> <listiterator object at 0xa7d6408c>
> >>> print list(obstinate_economist_enumerate("ABCDE"))
> [(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E')]
An improvement: using a generator so as not to unnecessarily create an
intermediate list from the initial enumerator:
>>> def obstinate_economist_enumerate(items):
... enum_iter = iter((i+1, x) for (i, x) in enumerate(items))
... return enum_iter
...
>>> print obstinate_economist_enumerate("ABCDE")
<generator object at 0xa7d6444c>
>>> print list(obstinate_economist_enumerate("ABCDE"))
[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E')]
--
\ "If sharing a thing in no way diminishes it, it is not rightly |
`\ owned if it is not shared." -- Saint Augustine |
_o__) |
Ben Finney
More information about the Python-list
mailing list