sort是python的一个内建函数,看一下python3下的sort(sorted()和sort函数功能一致,只是是否对排序对象本身改变有差异,所以以下只介绍sort)的函数定义:
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
默认情况下key=None,reverse=False,reverse参数表示是否对排序结果反转,简单明了,这里就不做过多说明。重点留给key这个参数:
>>>a=[1,3,4,5,2,6,9,8,7]
>>>a.sort()
>>>a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
#不带参数的情况下,sort对可排序对象默认进行从小到大的排序,当然,reverse置为true时则按照从大到小。
>>>a=[[2,4,7],[1,5,9],[2,5,8],[3,9,10],[6,9,13]]
>>>a.sort()
>>>a
[[1, 5, 9], [2, 4, 7], [2, 5, 8], [3, 9, 10], [6, 9, 13]]
#默认按照每个元素的第一个元素进行排序,如果我要按照元素的第二个元素进行排序呢?
>>>a=[[2,4,7],[1,5,9],[2,5,8],[3,9,10],[6,9,13]]
>>>a.sort(key=lambda x:x[1])
[[2, 4, 7], [1, 5, 9], [2, 5, 8], [3, 9, 10], [6, 9, 13]]
#这下就是按照每个元素中的第二个元素进行排序的了
#如果要按照多级比较呢?比如说以每个元素的第二元素为主序,第三个元素为次序依次排序。可以这样子:
>>>a=[[2,4,7],[1,5,9],[2,5,8],[3,9,10],[6,9,13]]
>>>a.sort(key=lambda x:(x[1],x[2]))
>>>a
[[2, 4, 7], [2, 5, 8], [1, 5, 9], [3, 9, 10], [6, 9, 13]]
#仔细观察下a中元素的位置,你就能理解key的用法了。
通常情况下,sort针对大量数据的排序时间复杂度会较高,对于Python来说,可以利用operator库的itemgetter函数来加开排序速度,用法如下:
>>>from operator import itemgetter
>>>a=[[1, 5, 9], [2, 4, 7], [2, 5, 8], [3, 9, 10], [6, 9, 13]]
#上面的例子就可以写成这样:
#按照列表成员的第一个元素进行排序
>>>a.sort(key=itemgetter(1))
>>>a
[[2, 4, 7], [1, 5, 9], [2, 5, 8], [3, 9, 10], [6, 9, 13]]
#同样的,多级排序依然可以使用itemrgetter提速
>>>a.sort(key=itemgetter(1,2))
[[2, 4, 7], [2, 5, 8], [1, 5, 9], [3, 9, 10], [6, 9, 13]]
#是不是很方便?不仅提速而且精简用法。
Ps:以上例子均以list为例,但是实际上,sort函数不仅仅是list的专属,只要是可迭代的对象都可以调用sort或sorted方法。所以,你也可能经常在元祖,字典中见到sort.