`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:这个排序名单
如何快速做到这一点?谢谢
`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:这个排序名单
如何快速做到这一点?谢谢
你问的是比较元组时的默认行为。然而,一般回答你的问题可能是:
>>> 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
。
你试过li.sort()
或sorted(li)
?元组进行比较时
>>> 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))]
默认行为是首次比较第一个,然后第二个等。您可以通过给一个自定义的比较函数作为参数传递给排序覆盖此()。
请勿使用自定义比较功能。它们很慢并且在Python 3中不受支持。请改用键功能。 – adw 2010-10-23 23:18:40