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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python获取list下标及其值的简单方法
Sep 12 Python
python3字符串操作总结
Jul 24 Python
简单了解django orm中介模型
Jul 30 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
python opencv如何实现图片绘制
Jan 19 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
Vue中v-for的数据分组实例
2018/03/07 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
Python学习入门之区块链详解
2017/07/25 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
Django中多种重定向方法使用详解
2019/07/17 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
中间件的定义
2016/08/09 面试题
计算机维护专业推荐信
2014/02/27 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
交通安全主题班会
2015/08/12 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
Spring 使用注解开发
2022/05/20 Java/Android