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机器学习库常用汇总
Nov 15 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
python 实现敏感词过滤的方法
Jan 21 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
python中有帮助函数吗
Jun 19 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 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
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
浅谈python内置变量-reversed(seq)
2017/06/21 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python能自学吗
2020/06/18 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
高中生校园生活自我评价
2013/09/19 职场文书
传播学毕业生求职信
2013/10/11 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
英语教学随笔感言
2014/02/20 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
付款承诺函范文
2015/01/21 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python