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中assert用法实例分析
Apr 30 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
Python 从相对路径下import的方法
Dec 04 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
基于python3生成标签云代码解析
Feb 18 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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过滤危险html代码的函数
2008/07/22 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP引用的调用方法分析
2016/04/25 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Django中的Signal代码详解
2018/02/05 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
python读取并写入mat文件的方法
2019/07/12 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
数字漫画:comiXology
2020/06/13 全球购物
专科应届生求职信
2013/11/24 职场文书
三年级数学教学反思
2014/01/31 职场文书
将相和教学反思
2014/02/04 职场文书
明信片寄语大全
2014/04/08 职场文书
优秀护士先进事迹
2014/05/08 职场文书
门店业绩提升方案
2014/06/08 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书