2010-10-23 83 views
1
`li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))]` 

我要作为排序依据的第一个数字中的每个元素eg.1106257,1华里,1,1,9,1,406的Python:这个排序名单

如何快速做到这一点?谢谢

回答

1

你问的是比较元组时的默认行为。然而,一般回答你的问题可能是:

>>> import operator 

>>> li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))] 
>>> li.sort(key=operator.itemgetter(0)) 
>>> li 
[(1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (1, (64, 64, 126)), 
(9, (249, 249, 249)), (406, (247, 247, 251)), (1106257, (255, 255, 255))] 

如果您想根据比第一(0),改变一些其他的列进行排序。例如,如果您想根据第2列和第1列进行排序,则可以提供operator.itemgetter(2, 1)作为key

2
>>> li = [(1106257, (255, 255, 255)), (1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (9, (249, 249, 249)), (1, (64, 64, 126)), (406, (247, 247, 251))] 
>>> li.sort() 
>>> li 
[(1, (16, 16, 118)), (1, (32, 32, 128)), (1, (48, 48, 122)), (1, (64, 64, 126)), (9, (249, 249, 249)), (406, (247, 247, 251)), (1106257, (255, 255, 255))] 

默认行为是首次比较第一个,然后第二个等。您可以通过给一个自定义的比较函数作为参数传递给排序覆盖此()。

+1

请勿使用自定义比较功能。它们很慢并且在Python 3中不受支持。请改用键功能。 – adw 2010-10-23 23:18:40