Python內置函數sorted

排序方法

比較列表的方法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)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章