Replacing cmp with key for sorting

Alan G Isaac aisaac at american.edu
Mon Nov 3 13:31:04 EST 2008


George Sakkis wrote:
> s.sort(cmp=lambda x,y: 0 if x==y else 
>                                     -1 if x.startswith(y) else
>                                     +1 if y.startswith(x) else
>                                     cmp(x,y))



Probably not what you had in mind ...

     >>> s
     ['a', 'bc', 'bd', 'bcb', 'ba', 'ab']
     >>> maxlen = max(len(si) for si in s)
     >>> def k(si): return si+'z'*(maxlen-len(si))
     ...
     >>> sorted(s,key=k)
     ['ab', 'a', 'ba', 'bcb', 'bc', 'bd']

Cheers,
Alan Isaac



More information about the Python-list mailing list