我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在上一篇文章中,苏南大叔主要描述了sorted()函数以及.sort()方法,结论是:两者基本相似。至于参数,对于python@2系列的版本,有个cmp,还有个key。而对于python@3系列,就没有cmp参数了,就只有key参数。这就有了本篇的内容:cmp参数向key参数的兼容代码转化。

苏南大叔:python代码,如何理解sorted排序里的cmp_to_key函数? - cmp_to_key
python代码,如何理解sorted排序里的cmp_to_key函数?(图2-1)

大家好,这里是苏南大叔的平行空间笔记本博客,这里记录苏南大叔和计算机代码的故事。本文就是针对sorted()函数/.sort()方法中的,cmp参数和key参数的转化问题的。测试环境:win10python@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]

苏南大叔:python代码,如何理解sorted排序里的cmp_to_key函数? - cmp_to_key_code
python代码,如何理解sorted排序里的cmp_to_key函数?(图2-2)

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系列中的cmpkey的合集。
  • python@3系列中,需要引入functools类,然后使用cmp_to_key()进行转化。

cmp_to_key使用方式

cmp_to_key()就是专门用于转化cmp参数到key参数的。cmp参数和key参数,是用于python内排序的参数,代表函数是sorted().sort()。这个cmp_to_key()函数就是用来python@2python@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相关代码,请联系:

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python