Pre-PEP: reverse iteration methods

Sean Ross sross at connectmail.carleton.ca
Tue Sep 23 22:51:07 EDT 2003


"Raymond Hettinger" <vze4rx4y at verizon.net> wrote in message
news:HA5cb.185$kD3.168 at nwrdny03.gnilink.net...
> Here is a discussion draft of a potential PEP.
[snip]
> Proposal
> ========
>
> Add a method called iter_backwards() to sequence objects that can benefit
> from it.  The above examples then simplify to::
>
>     for i in xrange(n).iter_backwards():
>         print seqn[i]
>
>     for elem in seqn.iter_backwards():
>         print elem
>

Hi.
This will mostly just be some alternate naming suggestions:

How about just ".backwards",  where backwards acts like a read-only property
that returns a generator for reverse iteration?

for i in xrange(n).backwards:
    print seqn[i]

for elem in seqn.backwards:
    print elem

It's not as explicit as iter_backwards(), but it's shorter, cleaner, and
appears
obvious (to me, anyway). Or, perhaps, 'ibackwards', or 'ireverse' ; or
ibackwards() or  ireverse(). (being reminiscent  of imap() and izip())
'.reverse' would be good, but, of course, it's already taken...

If one could be made, a fast** general purpose "reverse(iterable)" (or
ireverse(iterable)) function would be my preference (at the very least, it
would
avoid having to add iter_backwards() to several type definitions).

# e.g.
for i in reverse(xrange(n)):
    print seqn[i]

for index, item in reverse(enumerate(seqn)):
         print "index:%s item:%s"%(index, item)

# that sort of thing...





**    Yep, fast. Something where xrange(n-1, -1, -1) is not exorbitantly
       faster than reverse(xrange(n)). Similarly, for sequence types, you'd
       want reverse(list) to be atleast somewhere near as quick as:

        # python-faq, entry 4.6
        list.reverse()
        try:
                for x in list:
                        "do something with x"
        finally:
                list.reverse()






More information about the Python-list mailing list