【Python使用技巧】Python列表排序方法list.sort()的时空复杂度、参数及其使用,key参数的函数定义方法

list.sort(*key=Nonereverse=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方法默认先按照元组第一项升序排序,若相等则按照元组第二项排序,若仍相等则位置保持不变(稳定的排序方法)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值