Sorted Returns List and Reversed Returns Iterator
himanshu.garg at gmail.com
Sat Aug 23 06:25:34 CEST 2008
On Aug 22, 12:36 pm, Terry Reedy <tjre... at udel.edu> wrote:
> Peter Otten wrote:
> > ++imanshu wrote:
> >> I agree. Iterator is more flexible.
> I disagree. Neither is more flexible. You can iter the list returned
> by sorted and list the iter returned by reversed. Both do the minimum
> work necessary. See below.
> > Together and both might have returned the same types.
> True, but only by doing potentially unnecessary work and requiring the
> caller to do potentially unnecessary work that might even prevent the
> program from working. This is less flexible.
> Suppose sorted now returns alist with 50 million items. Suppose it
> instead returned iter(alist) but the caller wants to randomly index the
> items. Since the caller could not access the existing 50 million item
> list, the caller would have to make another 50 million item copy. This
> is non-trivial and might not even work do to memory limitations.
> > It's easy to generate a reversed sequence on the fly but impractical for a
> > sorted one. Python is taking the pragmatic approach here.
> To expand on this: sorting and reversing are algorithmically different
> operations. Sorting requires that one have all items in hand in a
> mutable sequence (list) for arbitrary re-ordering. Sorted works on any
> iterable and starts by making a new list. There is no point to not
> returning that list after it is sorted. It would be more work and less
> useful to do more.
> sorted(iterable, key=None, reverse=False):
> newlist = list(iterable)
> newlist.sort(key, reverse)
> return newlist
> Iterating over a concrete sequence in reverse order, on the other hand,
> is trivial. It would be more work and less useful to do more.
> def _reversed(seq): # 'hidden' generator function
> n = len(seq)
> while n:
> n -= 1
> yield seq[n]
> def reversed(seq):
> if hasattr(seq, '__reversed__'):
> return seq.__reversed__() # I presume this is tried first
> return _reversed(seq) # generic fall-back
> Terry Jan Reedy
Thanks for giving the 'behind the scenes' reasons. It looks
More information about the Python-list