Problem with the sort() function

Duncan Booth duncan.booth at invalid.invalid
Tue Feb 22 11:12:12 EST 2005


Scott David Daniels wrote:

>      if sys.version_info < (2, 4):
>          def sorted(iterable, cmp=None, key=None, reverse=False):
>              "return a sorted copy of its input"
>              seq = list(iterable)
>              if reverse:
>                  seq.reverse()        # preserve stability
>              if key is not None:
>                  seq = [(key(elem), i, elem) for i, elem
>                         in enumerate(seq)]
>                  seq.sort(cmp)
>              if key is not None:
>                  seq = [elem for (key, i, elem) in seq]
>              if reverse:
>                  seq.reverse()
>              return seq

I think you may have some unintended indentation on the 'seq.sort' line 
otherwise this only sorts when a key is specified.

Also, you probably want:

    if key is not None:
        if reverse:
           seq = [(key(elem), -i, elem) for i, elem
                in enumerate(seq)]
        else:
           seq = [(key(elem), i, elem) for i, elem
                in enumerate(seq)]

to handle the case where both key and reverse are given.



More information about the Python-list mailing list