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处理圆角图片、圆形图片的例子
Apr 25 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
浅谈python字符串方法的简单使用
Jul 18 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
python的sorted用法详解
Jun 25 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
Django框架表单操作实例分析
Nov 04 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
python自动下载图片的方法示例
Mar 25 Python
python的help函数如何使用
Jun 11 Python
Python入门基础之数字字符串与列表
Feb 01 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 高级课程笔记 面向对象
2009/06/21 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
初学python数组的处理代码
2011/01/04 Python
用Python编写简单的定时器的方法
2015/05/02 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
Python中@property的理解和使用示例
2019/06/11 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
python实现大学人员管理系统
2019/10/25 Python
python实现视频读取和转化图片
2019/12/10 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
Python self用法详解
2020/11/28 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
英国著名书店:Foyles
2018/12/01 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
工商企业管理应届生求职信
2013/11/03 职场文书
高校自主招生自荐信
2013/12/09 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
敬老月活动总结
2014/08/28 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
2014年妇女工作总结
2014/12/06 职场文书
教师先进个人材料
2014/12/17 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS