【python cookbook】【数据结构与算法】14.对不原生支持比较操作的对象排序
2023-09-14 08:59:26 时间
问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作。
解决方案:使用内建的sorted()函数可接受一个用来传递可调用对象的参数key,sorted利用该可调用对象返回的待排序对象中的某些值来比较对象。
from operator import attrgetter class User: def __init__(self, user_id): self.user_id = user_id def __repr__(self): return 'User({})'.format(self.user_id) # Example users = [User(23), User(3), User(99)] print(users) # Sort it by user-id used lambda表达式 print(sorted(users,key=lambda r:r.user_id)) # Sort it by user-id used operator.attrgetter() print(sorted(users, key=attrgetter('user_id')))
使用lambda表达式还是operator.attrgetter()或许只是个人偏好,但是operator.attrgetter()更快一些,而且具有允许同时提取多个字段值的能力。
这和针对字典的operator.itemgetter()的使用类似。
from operator import attrgetter class User: def __init__(self, user_id,fname,lname): self.user_id = user_id self.fname=fname self.lname=lname def __repr__(self): return 'User({},{},{})'.format(self.user_id,self.fname,self.lname) # Example users = [User(23,'Brian','Jones'), User(3,'David','Beazley'), User(99,'Aig','Jones')] print(users) # Sort it by lname,fname used operator.attrgetter() print(sorted(users, key=attrgetter('lname','fname')))
>>> ================================ RESTART ================================ >>> [User(23,Brian,Jones), User(3,David,Beazley), User(99,Aig,Jones)] [User(3,David,Beazley), User(99,Aig,Jones), User(23,Brian,Jones)] >>>
最后,本节展示的技术同样适用于min()和max()这样的函数:
>>> min(users,key=attrgetter('user_id')) User(3,David,Beazley) >>> max(users,key=attrgetter('user_id')) User(99,Aig,Jones) >>> max(users,key=attrgetter('fname')) User(3,David,Beazley)
相关文章
- Python之——python-nmap的安装与常用方法说明
- 【Python成长之路】python 基础篇 -- 装饰器【华为云分享】
- 移植 Python 量化交易 TA-Lib 库到函数计算
- Python编程:从入门到实践(选记)
- python标准库学习6
- 解决python写入mysql中datetime类型遇到的问题
- 使用Python创建AI比你想象的轻松
- python 报错 most likely due to a circular import 解决方法
- 【python cookbook】【数据结构与算法】14.对不原生支持比较操作的对象排序
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- Python之Pandas:pandas.DataFrame()函数的简介、具体案例、使用方法详细攻略
- 这七个Python GUI 库,学会后没有你做不出来的界面,这还不赶紧学起来
- Python微信公众号教程基础篇——收发文本消息
- Python实现基于Optuna超参数自动优化的xgboost分类模型(XGBClassifier算法)项目实战
- 【Python 八股文】- 常见的排序算法
- Python编程:json序列化python对象
- python列表和QVariant
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
- python web py入门(68)- jQuery - 按钮事件的响应顺序
- python基础===八大排序算法的 Python 实现
- 【python】面试常考数据结构算法
- 多版本Python共存时pip给指定版本的python安装package的方法
- 〖Python自动化办公篇⑲〗 - python实现邮件自动化 - 邮件发送
- 基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
- Python ---- 算法入门(2)分治算法解决【找数组的最大值和最小值】问题