排序方法
比較列表的方法sort()
和內置函數sorted()
>>> help(sorted)
Help on built-in function sorted in module __builtin__:
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
Note: 兩者接受的參數類似,但sorted()
返回一個新的序列對象。列表的sort()
方法只修改自身
>>> L = [1, 2 , 3]
>>> L.sort(reverse=True)
>>> L
[3, 2, 1]
>>> sorted(L)
[1, 2, 3]
>>> L
[3, 2, 1]
參數解釋
param | doc |
---|---|
cmp | 用於比較的函數,比較的值爲key |
key | 用於選擇列表元素中某個屬性作爲比較參數的函數 |
reverse | True爲降序False爲升序 |
2、key
指定的函數參數爲一個,原型如下:
def key(x):
return x[1]
sorted()
默認使用序列中元素的第一個參數比較。使用key=lambda x: x[1]
改成使用元素偏移爲1的值進行比較
>>> L = [(6, 2), (3, 4), (1, 5)]
>>> sorted(L)
[(1, 5), (3, 4), (6, 2)]
>>> sorted(L, key=lambda x: x[1])
[(6, 2), (3, 4), (1, 5)]
2、cmp
指定的函數參數爲兩個,原型如下:
def cmp(x, y):
return sum(x) - sum(y)
使用cmp=lambda x, y: sum(x) - sum(y)
修改比較規則爲比較每個序列之和的大小。結果按照6、7、8
的順序遞增。
>>> sorted(L, key=lambda x: x[:], cmp=lambda x, y: sum(x) - sum(y))
[(1, 5), (3, 4), (6, 2)]
3、修改reverse
,改變排序的升降序。reverse
默認爲False,修改爲True
後,結果按照降序排列。
>>> sorted(L, key=lambda x: x[:], cmp=lambda x, y: sum(x) - sum(y), reverse=True)
[(6, 2), (3, 4), (1, 5)]