Python sorted函式

記憶殘留發表於2017-07-18

排序的核心是比較兩個元素的大小,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']

 

相關文章