赞
踩
list.sort
(*, key=None, reverse=False)
Python中list.sort使用的排序方式为TimeSort,TimeSort是结合了归并排序(merge sort)和插入(insert sort)排序的一种在实际应用中高效的排序算法。
最坏时间复杂度O(nlgn),空间复杂度O(n)。
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))
由上述的例子,聪明的同学应该意识到sort默认是按照升序排序,于是就有了reverse参数。设置reverse=True,sort将按照降序排序。
另外,若不设置key参数和reverse参数,sort方法默认先按照元组第一项升序排序,若相等则按照元组第二项排序,若仍相等则位置保持不变(稳定的排序方法)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。