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
相关代码,请联系:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。