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进程类subprocess的一些操作方法例子
Nov 22 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
python实现发送form-data数据的方法详解
Sep 27 Python
python中使用input()函数获取用户输入值方式
May 03 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 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/12/29 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
详解Python中列表和元祖的使用方法
2015/04/25 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
Python3 处理JSON的实例详解
2017/10/29 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
python实现图片素描效果
2020/09/26 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
大学生职业生涯规划书模板
2014/01/03 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
共产党员承诺书
2014/03/25 职场文书
公司授权委托书范本
2014/09/18 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
写给同事的离职感言
2015/08/04 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js