[Python3][cmp_to_key函数][关于list的自定义排序]

cmp_to_key的使用场景

如果要对list进行排序(不论是让数字从小到大排序,还是让单词根据首字母排序),最简单的方法就是直接使用list.sort()。但是有些时候我们不只是想让数字从小到大或从大到小排序,当我们想要自定义排序规则的时候则可以使用cmp_to_key函数。

cmp_to_key的定义

1. cmp_to_key()是使用“键”来比较元素。

2. cmp_to_key()是内置于functools模块中,因此在使用函数前必须引入functools。
from functools import cmp_to_key

3. cmp_to_key()需要和sorted()一起使用。
我们来看看sorted括号中有哪些参数:sorted(iterable, key, reverse)

iterable表示一个数组,列表。
key表示元素位置的权重,可为空。
reverse表示正序还是倒序排列,可为空。

4. cmp_to_key的具体使用:
sorted([8, 4, 9, 2], key=cmp_to_key(mycmp))
注:mycmp是一个方法,用于比较列表中的两个元素,此方法会依次获取列表中的两个元素进行比较,并返回比较结果(其结果只能是-1,0,1)。

cmp_to_key是如何对列表中的元素进行排序的?

排序方法是:将每个键与序列中的其他键进行比较,根据两个元素的比较结果决定是否将后面的元素移动前面去。而调用cmp_to_key函数后结果只能返回-1,0,1:

1表示需要移动位置,0表示两个元素权重一样不移动位置,-1表示不移动位置。

实例

from functools import cmp_to_key

#mycmp方法会自动获取列表中的两个元素作为参数,而a,b则代指这两个参数,也可用c,d或i,j等
def mycmp(a, b):
    print('比较',a,'and',b)
    if a > b:
        return 1
    elif a < b:
        return -1
    else:
        return 0

ls = [8, 4, 9, 2 ]
print(sorted(ls, key=cmp_to_key(mycmp)))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值