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

本文介绍了Python中functools模块的cmp_to_key函数,用于自定义列表排序规则。通过实例展示了如何使用cmp_to_key与sorted()结合,实现复杂排序逻辑,比如根据特定方法比较元素。mycmp方法接收两个参数并返回比较结果,从而影响排序顺序。通过这个方法,可以实现如字母顺序、自定义规则等排序需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值