[Python-Dev] Re: PEP 322: Reverse Iteration

Alex Martelli aleaxit at yahoo.com
Wed Nov 5 13:14:52 EST 2003


On Wednesday 05 November 2003 05:34 pm, Samuele Pedroni wrote:
   ...
> I think he was wondering whether people rely on
>
> enumerate([1,2]).next
> i = enumerate([1,2])
> i is iter(i)
>
> working , vs. needing iter(enumerate([1,2]).next
>
> I think he was proposing to implement enumerate as
>
> class enumerate(object):
>    def __init__(self,iterable):
>      self.iterable = iterable
>
>    def __iter__(self):
>      i = 0
>      for x in self.iterable:
>        yield i,x
>        i += 1
>
>    def __reversed__(self):
>      rev = reversed(self.iterable)
>      try:
>        i = len(self.iterable)-1
>      except (TypeError,AttributeError):
>        i = -1
>      for x in rev:
>         yield i,x
>         i -= 1

Ah, I see -- thanks!  Well, in theory you COULD add a 'next' method too:

      def next(self):
          self.iterable = iter(self.iterable)
          try: self.index += 1
          except AttributeError: self.index = 0
          return self.index, self.iterable.next()

(or some reasonable optimization thereof:-) -- now __reversed__ would stop
working after any .next call, but that would still be OK for all use cases I 
can think of.


Alex




More information about the Python-Dev mailing list