注:本文所有代码均经过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.