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获取DLL和EXE文件版本号的方法
Mar 10 Python
复习Python中的字符串知识点
Apr 14 Python
python排序方法实例分析
Apr 30 Python
Python实现二叉搜索树
Feb 03 Python
python计算列表内各元素的个数实例
Jun 29 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
在Python中实现字典反转案例
Dec 05 Python
Python Django模型详解
Oct 05 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
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
使图片旋转的3种解决方案
2013/11/21 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
使用tensorflow实现线性svm
2018/09/07 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
详解重置Django migration的常见方式
2019/02/15 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
一个C/C++编程面试题
2013/11/10 面试题
婚纱店策划方案
2014/05/22 职场文书
质量月活动总结
2014/08/26 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
小学家长通知书评语
2014/12/31 职场文书
幼儿教师个人总结
2015/02/05 职场文书
质量保证书格式
2015/02/27 职场文书
校本培训个人总结
2015/02/28 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python