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