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