list.sort
(*, key=None, reverse=False)
时空复杂度
Python中list.sort使用的排序方式为TimeSort,TimeSort是结合了归并排序(merge sort)和插入(insert sort)排序的一种在实际应用中高效的排序算法。
最坏时间复杂度O(nlgn),空间复杂度O(n)。
参数
key
1、
传入关键字参数,用于计算列表中每项的权值大小。
例:
list = [(2, 3), (7, 5), (2, 1), (4, 4), (2, 8)]
用列表中元组的第二项进行排序,可以传入 key=lambda x:x[1];
先用列表中元组的第一项升序排序,若第一项相等则用第二项降序排序,可以传入 key = lambda x:(x[0], -x[1])。
2、
使用 functools.cmp_to_key(func) 兼容Python2.4版本前的比较。
func(x, y) :若 x>y 返回一个正数;若 x<y 返回一个负数;若 x=y 返回0。
例
要求:先用列表中元组的第一项升序排序,若第一项相等则用第二项降序排序
def cmp(x, y):
if x[0] < y[0]:
return 1
if x[0] > y[0]:
return -1
if x[1] > y[1]:
return 1
elif x[1] < y[1]:
return -1
else:
return 0
list = [(2, 3), (7, 5), (2, 1), (4, 4), (2, 8)]
list.sort(key=functools.cmp_to_key(cmp))
reverse
由上述的例子,聪明的同学应该意识到sort默认是按照升序排序,于是就有了reverse参数。设置reverse=True,sort将按照降序排序。
另外,若不设置key参数和reverse参数,sort方法默认先按照元组第一项升序排序,若相等则按照元组第二项排序,若仍相等则位置保持不变(稳定的排序方法)。