python代码,如何理解sorted排序里的cmp_to_key函数?
发布于 作者:苏南大叔 来源:程序如此灵动~
在上一篇文章中,苏南大叔主要描述了sorted()函数以及.sort()方法,结论是:两者基本相似。至于参数,对于python@2系列的版本,有个cmp,还有个key。而对于python@3系列,就没有cmp参数了,就只有key参数。这就有了本篇的内容:cmp参数向key参数的兼容代码转化。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文就是针对sorted()函数/.sort()方法中的,cmp参数和key参数的转化问题的。测试环境:win10,python@3.6.8。
回顾前文
还是需要先回顾一下sorted()的基本用法,链接参见:
在上一篇文章的最后一部分,苏南大叔描述了使用两个参数自定义排序标准的例子,这就引出了本文的内容。
下面的代码是基于python@3的,python@2不适用。
from functools import cmp_to_key
nums = [1,5,8,7,9,3]
def cmp(x, y):
return y-x
nums2 = sorted(nums, key=cmp_to_key(cmp))
print(nums,nums2)输出结果:
[1, 5, 8, 7, 9, 3]
[9, 8, 7, 5, 3, 1]
functools类导入cmp_to_key
在下面的文字中,使用functools引出了wraps()和partial():
from functools import wraps
from functools import partial本文中导入的是cmp_to_key():
from functools import cmp_to_key值得特别注意的是:
- 在
python@3系列中,key就是python@2系列中的cmp和key的合集。 - 在
python@3系列中,需要引入functools类,然后使用cmp_to_key()进行转化。
cmp_to_key使用方式
cmp_to_key()就是专门用于转化cmp参数到key参数的。cmp参数和key参数,是用于python内排序的参数,代表函数是sorted()和.sort()。这个cmp_to_key()函数就是用来python@2到python@3过度的一个临时产物。
from functools import cmp_to_key
nums = [7,3,8,1,9,5]
def cmp(x, y):
return y-x
nums2 = sorted(nums, key=cmp_to_key(cmp))
print(nums,nums2)
# [7, 3, 8, 1, 9, 5] [1, 3, 5, 7, 8, 9]使用方式二:
from functools import cmp_to_key
nums = [7,3,8,1,9,5]
nums.sort(key=cmp_to_key(cmp),reverse=True)
print(nums)
# [1, 3, 5, 7, 8, 9]相关链接
总结
更多python相关代码,请联系: