搜索
简帛阁>技术文章>python3中sorted函数里cmp参数改变详解

python3中sorted函数里cmp参数改变详解

今天在刷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方法本身也是针对对象的特定元素来进行比较的,直接使用特定元素的值更快捷、效率更高。

今天在刷leetcode的时候,对于179题返回最大数,用python2中的sorted(cmp)会很方便,但是在python3中这一参数被取消了,经过查找,发现应该借助functools中的cmp_
python343的版本已经没有cmp函数,被operator模块代替,在交互模式下使用时,需要导入模块。在没有导入模块情况下,会出现提示找不到cmp函数了,那么在python3该如何使用这个函数
目录Python3字符串比较_重写cmp函数不多说,直接上代码字符串比较cmpopeq直接使用cmp,会出现错误python3比较字符串如下Python3字符串比较_重写cmp函数由于在C++习惯
io模块在解释器的内置open()之上实现了一些类来完成基于文件的输入和输出操作。这些类得到了适当的分解,从而可以针对不同的用途重新组合——例如,支持向一个网络套接字写Unicode数据。11内存中的
python3cmp实现PY3__cmp__mixin类cmp()函数实现的注解python3使用cmp函数报错使用operator模块python3cmp实现python3移除了cmp()函数
描述ceil(x)函数返回一个大于或等于x的的最小整数。语法以下是ceil()方法的语法:importmathmathceil(x)注意:ceil()是不能直接访问的,需要导入math模块,通过静态对
个程序可以从键盘读取输入,也可以从文件读取输入;而程序的结果可以输出到屏幕上,也可以保存到文件便于以后使用。本文介绍Python最基本的I/O函数。一、控制台I/O读取键盘输入内置函数input
文件操作针对磁盘中的文件的读写。文件I/O输入input输出output文件操作步骤1、打开文件2、读写文件3、关闭文件1、打开文件open()参数1:文件路径相对路径绝对路径参数2:打开方式一、基础
all()函数主要用途是判断参数的所有元素是否不为0、空()、False则返回True,其中任一不符均返回False。它是Python的内置函数,在python文件直接可以使用。参数:元组(tup
zip在python3,处于优化内存的考虑,只能访问一次!!!(python2可以访问多次),童鞋们一定要注意,*coding:utf-8*zip()函数的定义:从参数中的多个迭代器取元素组合成一