当前位置:主页 > python教程 >

Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例

发布:2022-12-12 09:04:14 176


为网友们分享了Python相关的编程文章,网友后兴国根据主题投稿了本篇教程内容,涉及到Python、cookbook、数据结构与算法、对象、排序相关内容,已被895网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

本文实例讲述了Python实现对不原生支持比较操作的对象排序算法。分享给大家供大家参考,具体如下:

问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作。

解决方案:使用内建的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 Cookbook》)

希望本文所述对大家Python程序设计有所帮助。


相关文章

  • python实现词过滤的实例方法

    发布:2019-11-15

    今天小编就为大家分享一篇python 实现敏感词过滤的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • python中如何提取字符串的字符

    发布:2020-03-06

    字符串截取,也叫字符串切片,使用方括号[ ]来截取字符串。正索引代表从前往后索引,默认从0开始;负索引代表从后往前索引,字符串截取遵循“左闭右开”原则,也叫“包左不包右”。


  • 详解Python 实现数据结构-堆栈和队列的方法步骤

    发布:2020-01-26

    队、栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样、五花八门的变形和实现方式。这篇文章主要介绍了Python 实现数据结构-堆栈和队列的操作方法,需要的朋友可以


  • python获取列表最后一个元素的方法总结

    发布:2019-07-09

    list是Python内置的一种数据类型。list是一种有序的集合,可以随时添加和删除其中的元素。可通过列表最后一个元素的索引来获取它,语句为list[-1]。


  • Python+MySQL随机试卷及答案生成程序的实力分析

    发布:2021-08-26

    这篇文章主要介绍了Python+MySQL随机试卷及答案生成程序的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


  • Python PyQt4实现QQ抽屉效果的实例代码

    发布:2019-11-12

    这篇文章主要为大家详细介绍了Python PyQt4实现QQ抽屉效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • python Django中models进行模糊查询的示例

    发布:2022-06-18

    给大家整理一篇关于python的教程,今天小编就为大家分享一篇python Django中models进行模糊查询的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • python plt图表中文字大小调节的实例做法

    发布:2021-05-15

    今天小编就为大家分享一篇在python plt图表中文字大小调节的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


网友讨论