Python基数(12) - 如何对列表元素是对象的排序

列表元素是对象,对这样的列表排序方法

  • 添加类方法使用lt
class MyClass:
    def __index__(self):
        self.value = 0

    def __lt__(self, other):
        return self.value < other.value

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [my1,my2,my3]


a.sort()
print(a[0].value)
print(a[1].value)
print(a[2].value)
image.png
  • 添加类方法使用gt
class MyClass:
    def __index__(self):
        self.value = 0
    '''
        def __lt__(self, other):
        return self.value < other.value
    '''
    def __gt__(self, other):
        return self.value > other.value


my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [my1,my2,my3]


a.sort()
print(a[0].value)
print(a[1].value)
print(a[2].value)
image.png
  • 使用operator类
class MyClass:
    def __index__(self):
        self.value = 0

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

import operator   #导入operator

a = [my1,my2,my3]

a.sort(key=operator.attrgetter('value'))
b = sorted(a,key=operator.attrgetter('value'))


print(a[0].value)
print(a[1].value)
print(a[2].value)

print('b:',b[0].value)
image.png

列表元素是对象,对这样的列表如何进行倒序排列

  • 添加参数reverse = True
class MyClass:
    def __index__(self):
        self.value = 0

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

import operator

a = [my1,my2,my3]

a.sort(key=operator.attrgetter('value'),reverse=True)
b = sorted(a,key=operator.attrgetter('value'))


print(a[0].value)
print(a[1].value)
print(a[2].value)
image.png
  • 将lt,gt的符号改成相反的即可
    def __lt__(self, other):
        return self.value > other.value

    def __gt__(self, other):
        return self.value < other.value

总结

1.为类添加gt & lt 的方法,可以让类的实例支持sort,sorted函数
2.通过改变gt & lt方法的返回值,或者设置一下sort,sorted函数的reverse参数,就可以让列表倒序排列

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容