Python零基础入门学习32:类与面向对象编程:自定义对象的排序

:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为2分钟

列表方法.sort()

默认升序.sort(reverse=False)。

可以也进行降序排序,修改参数reverse=True。

.sort()排序方法效率很高,但它改变了原列表,返回值为None。

内置函数sorted()

与.sort()方法不同,虽然一样能实现排序功能,但它没有改变原列表,而只是返回并复制生成了一个新的排好序的列表。

只有当列表中的所有元素都是同一种类型的时候,.sort()和sorted()才会正常工作。

特殊方法__lt__

由于Python的可扩展性,每种数据类型可以定义特殊方法。

def __lt__(self, y)

返回True表示比y“小”,排在前面。

返回False表示比y“大”,排在后面。

只要类定义中定义了特殊方法__lt__,任何自定义类都可以使用x < y这样的比较。

类的一个例子:Student

构建一个自定义的类Student,有2个属性name和grade,按照成绩由高到低排序。

class Student:
    def __init__(self, name, grade):
        self.name, self.grade = name, grade
    
    # 内置sort函数只引用“<”比较符来判断前后顺序。
    def __lt__(self, other):
        # 成绩比other高就排在前面
        return self.grade > other.grade
    
    # Student的易读字符串表示。
    def __str__(self):
        return "(%s,%d)" % (self.name, self.grade)
    
    # Student的正式字符串表示,我们让它跟易读表示相同。
    __repr__ = __str__

# 构建一个列表,加入到Student对象中。
s = list()

# 添加Student对象到List中。
s.append(Student("Jack", 80))
s.append(Student("Jane", 75))
s.append(Student("Smith", 82))
s.append(Student("Cook", 90))
s.append(Student("Tom", 70))
print("Original:", s)

s.sort()

print("Sorted:", s)

<<<
Original: [(Jack,80), (Jane,75), (Smith,82), (Cook,90), (Tom,70)]
Sorted: [(Cook,90), (Smith,82), (Jack,80), (Jane,75), (Tom,70)]
<<<

To be continued.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容