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制作mysql数据迁移脚本
Jan 01 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Python求平面内点到直线距离的实现
Jan 19 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
django中嵌套的try-except实例
May 21 Python
python 安装移动复制第三方库操作
Jul 13 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
pytorch中的 .view()函数的用法介绍
Mar 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
php自动适应范围的分页代码
2008/08/05 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
javascript关于继承解析
2016/05/10 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python获取list下标及其值的简单方法
2016/09/12 Python
用Python设计一个经典小游戏
2017/05/15 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
护理个人求职信范文
2014/01/08 职场文书
公益活动策划方案
2014/01/09 职场文书
党支部四风整改方案
2014/10/25 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android
Hive导入csv文件示例
2022/06/25 数据库