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 相关文章推荐
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
实现python版本的按任意键继续/退出
Sep 26 Python
python执行使用shell命令方法分享
Nov 08 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
python 执行终端/控制台命令的例子
Jul 12 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
举例讲解Python装饰器
Dec 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
form自动提交实例讲解
2017/07/10 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
python中的五种异常处理机制介绍
2014/09/02 Python
pow在python中的含义及用法
2019/07/11 Python
keras中的backend.clip用法
2020/05/22 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
教师求职自荐信
2014/03/09 职场文书
精神文明单位申报材料
2014/05/02 职场文书
讲解员培训方案
2014/05/04 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
消防志愿者活动方案
2014/08/23 职场文书
经典祝酒词大全
2015/08/12 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers