排序的核心是比較兩個元素的大小,python中數字排序可以直接使用sorted函式,如果是字串或者字典,直接比較數學上的大小是沒有意義的。因此,比較過程必須通過函式抽象出來。
通常規定,對於兩個元素x和y,如果認為x<y,則返回-1,如果認為x==y,則返回0,如果認為x>y,則返回1,這樣排序演算法就不用關心具體的比較過程,而是根據比較結果直接排序。
print sorted([36,5,12,9,21]) # ==> [5, 9, 12, 21, 36]
sorted()函式也是一個高階函式,它可以接收一個比較函式來實現自定義的排序。
實現倒序排序:
def reversed_cmp(x,y): if x>y: return -1 if x<y: return 1 return 0
傳入自定義的比較函式reversed_cmp,就可以實現倒序排序
print sorted([36,5,12,9,21],reversed_cmp) # ==>[36, 21, 12, 9, 5]
預設情況下,對字串排序,是按照ASCII的大小比較的,由於'Z' < 'a',結果,大寫字母Z會排在小寫字母a的前面。
print sorted(['bob', 'about', 'Zoo', 'Credit']) # ==> ['Credit', 'Zoo', 'about', 'bob']
忽略大小寫的比較演算法:
def cmp_ignore_case(s1,s2): u1=s1.upper() u2=s2.upper() if u1<u2: return -1 if u1>u2: return 1 return 0 print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case) #['about', 'bob', 'Credit', 'Zoo']