標籤:mic 要求 set 定義 方法 div art python abs
排序函數介紹:sort()和sorted()都屬於Python list的排序方法
區別:sort()屬於永久性排列,直接改變該list ; sorted屬於暫時性排列,會產生一個新的序列。
#sorted()>>> print sorted([5, 2, 3, 1, 4])[1, 2, 3, 4, 5]#sort()>>> L = [5, 2, 3, 1, 4]>>> L.sort()>>> print L[1, 2, 3, 4, 5]
以下對常用的sorted進行介紹:
python 內建的sorted()函數可以對一個list進行排序:
>>> sorted([8,3,8,11,-2])[-2, 3, 8, 8, 11]
既然說是高階函數,那麼它還可以接受一個key函數來實現自訂的排序,比如按照絕對值大小進行排序:
>>> sorted([8,3,8,11,-9],key=abs)[3, 8, 8, -9, 11]
key指定的函數將作用於list中的每一個元素上,根據key函數返回的結果進行排序。
來看看字串排序的問題:
>>> sorted([‘abc‘,‘Abc‘,‘Cba‘,‘bAc‘])[‘Abc‘, ‘Cba‘, ‘abc‘, ‘bAc‘]
預設的,對於字串,sorted函數按照ASCII的大小進行排序,因為C<a,大寫的C會排在小寫a前面。
如果我們想要達到忽略大小寫排序,只需要更改一下key函數:
>>> sorted([‘abc‘,‘Abc‘,‘Cba‘,‘bAc‘],key=str.lower)[‘abc‘, ‘Abc‘, ‘bAc‘, ‘Cba‘]
進一步,要進行反向排序,可以傳入第三個參數reverse=True:
>>> sorted([‘abc‘,‘Abc‘,‘Cba‘,‘bAc‘],key=str.lower,reverse=True)[‘Cba‘, ‘bAc‘, ‘abc‘, ‘Abc‘]
sorted()排序的關鍵在於實現一個映射函數!
練習:
用一組tuple表示學生名字和成績:L = [(‘Bob‘, 75), (‘Adam‘, 92), (‘Bart‘, 66), (‘Lisa‘, 88)]
要求:分別按名字和成績排序
#按名字字母排序>>> L = [(‘Bob‘, 75), (‘Adam‘, 92), (‘Bart‘, 66), (‘Lisa‘, 88)]>>> def by_name(t): return t[0] #t[0]表示名字>>> L2 = sorted(L,key = by_name)>>> print(L2)[(‘Adam‘, 92), (‘Bart‘, 66), (‘Bob‘, 75), (‘Lisa‘, 88)]#按成績低到高排序>>> def by_score(t): return t[1] #t[1]表示成績>>> L2 = sorted(L,key = by_score)>>> print(L2)[(‘Bart‘, 66), (‘Bob‘, 75), (‘Lisa‘, 88), (‘Adam‘, 92)]
Python排列函數:sort、sorted