1. 程式人生 > >python中sort和sorted函式小結

python中sort和sorted函式小結

L.sort(cmp=None, key=None, reverse=False) 
sorted(iterable, cmp=None, key=None, reverse=False) 
這樣看,sorted函式只比sort函式多一個iterable引數,其餘沒什麼不同,iterable是一個迭代器引數。 
一、 
sorted是一個內建函式,sort是列表的一個內部函式,所以呼叫方式不一樣,並且sorted函式不改變其迭代器引數,返回一個排序好的序列副本,但是sort作為列表的內部函式,在呼叫完之後,列表自身內部已經是排序好的順序

L1 = [3,2,5,1,4]
L2 = [3,2,5,1,4]
L1.sort()
print('L1:',L1)
print('sorted:',sorted(L2))
print('L2:',L2)
1
2
3
4
5
6
這段程式碼執行結果為 
L1: [1, 2, 3, 4, 5] 
sorted: [1, 2, 3, 4, 5] 
L2: [3, 2, 5, 1, 4]

二、key引數 
key 是帶一個引數的函式, 用來為每個元素提取比較值 
1.假如我們不使用key引數,key預設是None

L = [(1,'S'),(3,'E'),(2,'A')]
L.sort()
print('sort:',L)
L = [(1,'S'),(3,'E'),(2,'A')]
print('sorted:',sorted(L))
1
2
3
4
5
以上程式碼執行的結果為: 
sort: [(1, ‘S’), (2, ‘A’), (3, ‘E’)] 
sorted: [(1, ‘S’), (2, ‘A’), (3, ‘E’)]

2.現在我們使用key引數,提取最後一個元素作為比較值

def last(L):
    return L[-1]
L = [(1,'S'),(3,'E'),(2,'A')]
L.sort(key = last)
print('sort:',L)
L = [(1,'S'),(3,'E'),(2,'A')]
print('sorted:',sorted(L,key = last))
1
2
3
4
5
6
7
上面程式碼執行結果為: 
sort: [(2, ‘A’), (3, ‘E’), (1, ‘S’)] 
sorted: [(2, ‘A’), (3, ‘E’), (1, ‘S’)]

3.使用lambda匿名函式作為key引數 
通過 lambda 關鍵字,可以建立短小的匿名函式。

L = [(1,'S'),(3,'E'),(2,'A')]
L.sort(key = lambda L : L[-1])
print('sort:',L)
L = [(1,'S'),(3,'E'),(2,'A')]
print('sorted:',sorted(L,key = lambda L : L[-1]))
1
2
3
4
5
執行結果為; 
sort: [(2, ‘A’), (3, ‘E’), (1, ‘S’)] 
sorted: [(2, ‘A’), (3, ‘E’), (1, ‘S’)]

三、reverse引數 
reverse引數是預設值false的時候是正序排,當reverse = True的時候是倒序排列

L = [1,3,2]
L.sort()
print(L)
L.sort(reverse = True)
print(L)
1
2
3
4
5
執行結果為: 
[1, 2, 3] 
[3, 2, 1]

關於cmp函式,因為在Python3.x中已經取消了這個引數。。在此就不多說了
---------------------