this customize sort did not work ,what's wrong?

Terry Reedy tjreedy at udel.edu
Sat Jan 23 18:44:57 EST 2010


On 1/23/2010 3:57 PM, thinke365 wrote:
>
> l = list()
> l1 = list((1, 2, 3, 4))
> l2 = list((1,2))
> l3 = list((1, 2, 3, 4, 5))
> l.append(l1)
> l.append(l2)
> l.append(l3)
> print l
>
> def sort_by_list(E1, E2):
>      print len(E1), len(E2)
>      return len(list(E1))>  len(list(E2))
>
> l.sort(cmp=sort_by_list)
> print l
>
> output:
> [[1, 2, 3, 4], [1, 2], [1, 2, 3, 4, 5]]
> 2 4
> 5 2
> [[1, 2, 3, 4], [1, 2], [1, 2, 3, 4, 5]]
>
> the order of the elements in the list did not change!

Here is what is right!

 >>> l = [ (1,2,3), (1,2), (1,2,3,4,5), () ]
 >>> l.sort(key=len)
 >>> l
[(), (1, 2), (1, 2, 3), (1, 2, 3, 4, 5)]

The cmp param is gone in 3.x in favor of key. Use the latter.

Terry Jan Reedy




More information about the Python-list mailing list