Python使用内置sorted()函数对自定义类实例排序的两种方法

Python自定义类排序
本文介绍如何在Python中对自定义类的对象进行排序,通过重写__lt__方法或使用sorted函数的key参数,实现对分数类实例的值进行排序。

     在Java中,自定义类可以通过继承comparable接口,重写compareTo方法来使用内置sort()函数来对自定义对象排序,我就在想Python中有没有类似的操作。

    首先随便写个自定义类,比如说我写了个“分数”类,成员变量包括分子、分母和分数的值,后面我们根据值来对分数排序。代码如下:

class Frac:
    def __init__(self, upper, lower):
        self.upper = upper
        self.lower = lower
        self.value = upper / lower

    def __str__(self):
        return "{}/{}".format(self.upper, self.lower)

经过一顿摸索,首先我试了试直接对自定义对象的list调用sorted()函数

a, b, c = Frac(1, 2), Frac(1, 4), Frac(1, 3)
l = [a, b, c]
l = sorted(l)
for i in l:
    print(str(i))

结果报错:

TypeError: '<' not supported between instances of 'Frac' and 'Frac'

原来只要定义对象之间的“<”操作符就可以了,也就是重写__lt__方法,感觉和Java里面重写compareTo的方法比较像。于是在类的代码里面加上一段:

    def __lt__(self, other):
        if self.value < other.value:
            return True
        else:
            return False

再次运行,运行结果:

问题解决。

    另外还有一种方法,就是指定sorted函数的key参数,key参数接收一个函数作为参数,来指定排序的key,通常用lambda表达式就行了,比如上文中,不用重写__lt__方法,在调用sorted函数的时候加上key参数:

sorted(l, key=lambda x: x.value)

也可以正确排序。

Python中,对列表进行排序可以通过内置函数sort和sorted来实现。这两个函数都是用来排序列表的,但它们有一个关键的区别:sort方法会就地修改原列表,而sorted函数则会返回一个新的排序后的列表,原列表不会被改变。 参考资源链接:[python内置函数翻译参考中文文档.pdf](https://wenku.youkuaiyun.com/doc/6460757e5928463033adfcd8?spm=1055.2569.3001.10343) sort方法的用法如下: ```python 列表.sort(key=None, reverse=False) ``` 其中,key参数指定排序的依据,默认为None;reverse参数指定排序的方式,如果为True则为降序排序,否则为升序排序。 例如,对一个数字列表进行升序排序的代码如下: ```python numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] numbers.sort() print(numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] ``` sorted函数的用法如下: ```python sorted(可迭代对象, key=None, reverse=False) ``` 这个函数可以接受任何可迭代对象,返回一个排序后的新列表。 例如,对一个字符串列表进行降序排序的代码如下: ```python words = ['banana', 'pie', 'Washington', 'book'] sorted_words = sorted(words, reverse=True) print(sorted_words) # 输出: ['Washington', 'pie', 'banana', 'book'] ``` 在学习这些内置函数时,如果遇到英文描述难以理解的情况,可以参考《python内置函数翻译参考中文文档.pdf》这份资料。该文档提供了常见Python内置函数的中英文对照翻译,配以实例参考,内容简单清晰,非常适合初学者在使用内置函数时对照学习和使用。通过这份资料,你可以快速准确地理解sort和sorted函数的功能和用法,同时也能在遇到其他内置函数时快速查阅其中文翻译和使用示例。 参考资源链接:[python内置函数翻译参考中文文档.pdf](https://wenku.youkuaiyun.com/doc/6460757e5928463033adfcd8?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值