Python:orderable協議
阿新 • • 發佈:2018-12-20
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @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高階')]