注:本文所有代碼均經(jīng)過Python 3.7實際運行檢驗菊匿,保證其嚴謹性城丧。
本文閱讀時間約為2分鐘。
列表方法.sort()
默認升序.sort(reverse=False)芹务。
可以也進行降序排序蝉绷,修改參數(shù)reverse=True。
.sort()排序方法效率很高枣抱,但它改變了原列表熔吗,返回值為None。
內(nèi)置函數(shù)sorted()
與.sort()方法不同佳晶,雖然一樣能實現(xiàn)排序功能桅狠,但它沒有改變原列表,而只是返回并復制生成了一個新的排好序的列表轿秧。
只有當列表中的所有元素都是同一種類型的時候中跌,.sort()和sorted()才會正常工作。
特殊方法__lt__
由于Python的可擴展性菇篡,每種數(shù)據(jù)類型可以定義特殊方法漩符。
def __lt__(self, y)
返回True表示比y“小”,排在前面驱还。
返回False表示比y“大”嗜暴,排在后面凸克。
只要類定義中定義了特殊方法__lt__,任何自定義類都可以使用x < y這樣的比較闷沥。
類的一個例子:Student
構(gòu)建一個自定義的類Student萎战,有2個屬性name和grade,按照成績由高到低排序狐赡。
class Student:
def __init__(self, name, grade):
self.name, self.grade = name, grade
# 內(nèi)置sort函數(shù)只引用“<”比較符來判斷前后順序撞鹉。
def __lt__(self, other):
# 成績比other高就排在前面
return self.grade > other.grade
# Student的易讀字符串表示。
def __str__(self):
return "(%s,%d)" % (self.name, self.grade)
# Student的正式字符串表示颖侄,我們讓它跟易讀表示相同鸟雏。
__repr__ = __str__
# 構(gòu)建一個列表,加入到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.