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读写excel的方法
Nov 18 Python
Python动态加载模块的3种方法
Nov 22 Python
在Python中使用next()方法操作文件的教程
May 24 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python实现中文文本分句的例子
Jul 15 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
python和C++共享内存传输图像的示例
Oct 27 Python
用Python提取PDF表格的方法
Apr 11 Python
Python3中最常用的5种线程锁实例总结
Jul 07 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
python定时关机小脚本
2018/06/20 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
python实现银行账户系统
2021/02/22 Python
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
团员的自我评价
2013/12/01 职场文书
职业女性的职业规划
2014/03/04 职场文书
应聘教师自荐书
2014/06/16 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
离职告别感言
2015/08/04 职场文书
公司与个人合作协议书
2016/03/19 职场文书
python - asyncio异步编程
2021/04/06 Python