cmp_to_key——python3

cmp_to_key的使用

因python3的sorted函数不再支持比较函数cmp,只能通过functools中的cmp_to_key传给key,实现python2中sorted函数的cmp参数的功能

首先,我们知道list.sort() 和 sorted() 都有一个 key 形参用来指定在进行比较前要在每个列表元素上调用的函数。

例如

# 不区分大小写排序
print(sorted("This is a test string from Andrew".split(), key=str.lower))

输出:['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

l = [(9, 4), (2, 10), (4, 3), (3, 6),(9, 2)]
print(sorted(l,key=lambda x:x[0]))
print(sorted(l,key=lambda x:x[1]))

输出:

[(2, 10), (3, 6), (4, 3), (9, 4), (9, 2)]
[(9, 2), (4, 3), (9, 4), (3, 6), (2, 10)]

但这只能进行单个元素的比较。

比如我们要将上述列表,按元素中第一个数逆序排列,若第一个数相等,按第二个数的顺序排列。这就用到了cmp_to_key!

它在list中的工作机制就是将列表中的元素去两两比较,当cmp返回是正数时 交换两元素

a = [(9, 4), (2, 10), (4, 3), (3, 6),(9, 2)]
def cmp(x,y):
    if x[0] < y[0]:
        return 1
    elif x[0] > y[0]:
         return -1
    else:
        if x[1] > y[1]:
            return 1
        else:
            return -1
print(sorted(a,key=cmp_to_key(cmp)))

输出:

[(9, 2), (9, 4), (4, 3), (3, 6), (2, 10)]
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YYHhao.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值