Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能
Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数。相应地从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 ‘key’ 参数用来在进行比较之前指定每个列表元素上要调用的函数。但是这个函数不能支持两个对象之间进行比较,只支持对某个对象处理后返回一个值。《Python中sort、sorted的cmp参数废弃之后使用__lt__支持复杂比较的方法》介绍了使用重写__lt__方法实现复杂比较的方法,除了这种方法之外,其实Python建议的方法是使用functools模块的cmp_to_key()将原有的比较方法转换成新增参数key支持的函数。具体步骤如下:
1、import functools模块;
2、调用functools. cmp_to_key(cmp)将比较函数cmp转换为排序方法sort/sorted的参数key可以使用的函数如cmpkey;
3、调用sort/sorted传入key=cmpkey。
案例:
>>> import functools
>>> def cmp(self,other):
if self.price>other.price:return 1
elif self.price==other.price:return 0
else:return -1
>>> class Car():
def __init__(self,carname, price):
self.carname,self.price = carname, price
def __repr__(self):
return str(self.__dict__)
>>> car1,car2,car3,car4 = Car('爱丽舍',10),Car('凯美瑞',27),Car('爱丽舍',10),Car('途观',27)
>>> cars=[car1,car2,car3,car4]
>>> cars
[{'carname': '爱丽舍', 'price': 10}, {'carname': '凯美瑞', 'price': 27}, {'carname': '爱丽舍', 'price': 10}, {'carname': '途观', 'price': 27}]
>>> cars.sort(key=functools.cmp_to_key(cmp)) #调用cmp_to_key函数进行转换
>>> cars #查看排序结果
[{'carname': '爱丽舍', 'price': 10}, {'carname': '爱丽舍', 'price': 10}, {'carname': '凯美瑞', 'price': 27}, {'carname': '途观', 'price': 27}]
>>>
参考资料:
《Python中排序方法sort、函数sorted的key参数的作用分析》
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能的更多相关文章
- python中sort()方法的cmp参数
<python基础编程>里有讲到一段高级排序: “如果希望元素能按照特定的方式进行排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素,第5章内对此进行讲解) ...
- Python中sort、sorted的cmp参数废弃之后使用__lt__支持复杂比较的方法
Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数.相应地从Python ...
- 为什么Python中sort方法和sorted函数调用废弃使用cmp参数
Python中sort方法和sorted函数老猿在前面一些章节介绍过,具体语法及含义在此不再展开说明,但老猿在前面学习相关内容时,只使用了简单的案例,对这两个方法的key参数没有深入研究,总以为就是以 ...
- Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
- Python中sort与sorted函数
python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的序列都是适用的: 并且sort()函数是内置函数,会改变当前对象,而sorted()函 ...
- Python中sort以及sorted函数初探
sorted(...) Help on built-in function sorted in module __builtin__: sorted(...) sorted(iterable, cmp ...
- Python中的sorted() 和 list.sort() 的用法总结
只要是可迭代对象都可以用sorted . sorted(itrearble, cmp=None, key=None, reverse=False) =号后面是默认值 默认是升序排序的, 如果想让结果降 ...
- python中sort和sorted用法的区别
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3 ...
- Python中的sorted函数以及operator.itemgetter函数 【转载】
operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...
随机推荐
- leetcode26:valid-palindrome
题目描述 判断题目给出的字符串是不是回文,仅考虑字符串中的字母字符和数字字符,并且忽略大小写 例如:"A man, a plan, a canal: Panama"是回文 &quo ...
- /etc/resolv.conf文件自动恢复的解决方法
/etc/resolv.conf文件自动恢复的解决方法: service NetworkManager stop #后台进程关闭 chkconfig NetworkManager off #配置关闭, ...
- ubuntu 文件编码格式 转换
正在学习jquery,之前在windows下弄的编码到了 ubuntu下,乱码: 找到一个方法: iconv : 源文件:a.htm 格式:gbk: 目标: a.html 格式:utf8: ic ...
- JS超酷时钟的制作
通过补充代码,实现时钟实时显示当前时间:年.月.日.时.分.秒.日期. <!DOCTYPE html> <html> <head lang="zh-CN&quo ...
- (1)ElasticSearch搭配Kibana在linux环境的部署
1.简介 这个章节主要介绍ElasticSearch+Kibana两个组件在linux环境的部署步骤,以及在部署过程中遇到问题解决,暂就不涉及集群部署知识点,后面章节再详细讲解这块.下面让我们来简单了 ...
- 工具博客转载-ftrace
https://linux.cn/article-9273-1.html https://lwn.net/Articles/365835/ Documentation/trace/events.txt ...
- 为什么人们总是认为epoll 效率比select高!!!!!!
今天看公司代码时,发现代码里面使用的事清一色的代码使用epoll, 所以就得说一说了:宏观看一看epoll 和select的实现: select原理概述 调用select时,会发生以下事情: 从用户空 ...
- 在linux下,为什么 i386 ELF可执行文件默认从地址(.text)0x08048000开始分配。 而 x64是0x400000
- 如何避免Cephfs被完全毁掉
前提 一套系统的最低要求是可恢复,也就是数据不丢失,但是在各种各样的原因下,整套系统都有被毁掉的可能,一直以来有个观点就是存储是需要两套的,一般情况下很难实现,但是如何把故障发生的概率降低到最低,这个 ...
- guitar pro系列教程(九):Guitar Pro音谱“编辑”讲解
对广大音乐人来说,guitar pro不只是一款看谱软件,更是制谱辅助创作的好搭档 打开guitar pro创作软件的 主界面,你会看到"编辑"的字样,单击一下,会弹出下面的界面, ...