python3中sorted函数里cmp参数改变详解


Posted in Python onMarch 12, 2020

今天在刷leetcode的时候,对于179题返回最大数,用python2中的sorted(cmp)会很方便,但是在python3中这一参数被取消了,经过查找,发现应该借助functools中的cmp_to_key函数,直接贴代码

import functools
def cmp(a,b):
  if a > b :
    return -1
  elif a < b :
    return 1
  else:
    return 0
    
nums = [1,2,3,4,5,6]
sorted_nums = sorted(nums, key = functools.cmp_to_key(cmp))

Out[30]: [6,5,4, 3, 2, 1]

但注意需要转换的cmp函数的返回值必须是0, 1, -1

知识点扩展:

为什么Python中sort方法和sorted函数调用废弃使用cmp参数

Python中sort方法和sorted函数老猿在前面一些章节介绍过,具体语法及含义在此不再展开说明,但老猿在前面学习相关内容时,只使用了简单的案例,对这两个方法的key参数没有深入研究,总以为就是以前c语言排序算法中的cmp函数。今天在研究富比较方法的运用时才发现key根本不是cmp函数,而是一个只针对比较元素自身的函数,不像cmp函数是两个对象之间比较。
经查阅资料和测试,发现其实早期的Python版本中是提供了cmp函数的,其版本演进沿革如下:
Python2.1以前的排序比较方法只提供一个__cmp__方法,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了__cmp__方法。相应地从Python2.4开始,list.sort() 和 sorted() 都增加了一个 ‘key' 参数用来在进行比较之前指定每个列表元素上要调用的函数。
为什么要这么处理呢?这是因为cmp方法本身也是针对对象的特定元素来进行比较的,直接使用特定元素的值更快捷、效率更高。

到此这篇关于python3中sorted函数里cmp参数改变详解的文章就介绍到这了,更多相关python3中sorted函数里关于cmp这一参数的改变内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用select模块实现非阻塞的IO
Feb 03 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
Python读取Excel的方法实例分析
Jul 11 Python
python中关于for循环的碎碎念
Jun 30 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
用Python将结果保存为xlsx的方法
Jan 28 Python
python虚拟环境完美部署教程
Aug 06 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
Python自动化操作实现图例绘制
Jul 09 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 Python
pytorch 使用半精度模型部署的操作
May 24 Python
Python实现子类调用父类的初始化实例
Mar 12 #Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 #Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 #Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 #Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 #Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 #Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 #Python
You might like
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
python实现学生信息管理系统
2020/04/05 Python
python实现飞机大战微信小游戏
2020/03/21 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
函授自我鉴定
2013/11/06 职场文书
大学自荐信
2013/12/12 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
Python实现生活常识解答机器人
2021/06/28 Python