Python:orderable协议

#!/usr/bin/env python
# coding:UTF-8


"""
@version: python3.x
@author:曹新健
@contact: 617349013@qq.com
@software: PyCharm
@file: orderable协议.py
@time: 2018/11/7 17:14
"""

"""
1、列表可以使用sort()方法进行排序。其他iterable对象(包括列表),可以使用sorted()函数,可指定reverse
   和key参数,不会改变原序列,排序结果以新序列返回。
2、自定义类实例若想使用sorted排序,可以定义__lt__()方法。
3、自定义类排序排序也可以直接给sorted的key参数指定operator模块的attrgetter。
4、有索引结构的可以使用operator模块的itemgetter。
"""
from operator import attrgetter,itemgetter

class Tester:
    def __init__(self,name,age,rank):
        self.name = name
        self.age = age
        self.rank = rank

    def __str__(self):
        return "{name}--{age}--{rank}".format(**vars(self))

    def __repr__(self):
        return self.__str__()

    def __lt__(self, other):
        if hasattr(other,"name"):
            return self.name < other.name
        return False

class Tester1:
    def __init__(self,name,age,rank):
        self.name = name
        self.age = age
        self.rank = rank

    def __str__(self):
        return "{name}--{age}--{rank}".format(**vars(self))

    def __repr__(self):
        return self.__str__()

testers = (Tester("cxj",18,"3高级"),Tester("xiaoming",28,"2中级"),Tester("lily",38,"1低级"))
print(sorted(testers))
#打印[cxj--18--3高级, lily--38--1低级, xiaoming--28--2中级]

testers1 = (Tester1("cxj",18,"3高级"),Tester1("xiaoming",28,"2中级"),Tester1("lily",38,"1低级"))
print(sorted(testers1,key=attrgetter("age")))
#打印[cxj--18--3高级, xiaoming--28--2中级, lily--38--1低级]

testers2 = (("cxj",18,"3高级"),("xiaoming",28,"2中级"),("lily",38,"1低级"))
print(sorted(testers2,key=itemgetter(2)))
#打印[('lily', 38, '1低级'), ('xiaoming', 28, '2中级'), ('cxj', 18, '3高级')]

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值