從零開始的Python學習 知識補充sorted

微笑小狗發表於2018-11-18

sorted()方法

sorted()可用於任何一個可迭代物件。

原型為sorted(iterable, cmp=None, key=None, reverse=False)

 

iterable:一個可迭代物件;

cmp:用於比較的函式,比較什麼由key決定;

key:用列表元素的某個屬性或函式進行作為關鍵字,有預設值,迭代集合中的一項;

reverse:排序規則. reverse = True  降序 或者 reverse = False 升序,有預設值。

(1)cmp引數

cmp接受一個函式,如

def f(a,b)

  return a-b

如果a邏輯小於b,函式返回負數;a等於b,函式返回0;a大於b,函式返回正數。

但是在python3中,cmp引數被淘汰了。但是可以使用key引數實現它的功能,本文後面會有介紹。

(2)key引數

引數key的使用通常配合lambda,這是一個隱函式,使用要按照固定格式:

例如可迭代物件的中的元素是一個元組:key = lambda x:x[0],意思按每一個元組的第0個元素排序。

當然如果可迭代物件中放的是字典,那填上它的鍵就可以按鍵對應的值進行排序。

例如:

order=[{`no`:1,`age`:18},{`no`:3,`age`:19},{`no`:2,`age`:20}]
order = sorted(order,key=lambda x:x[`no`])
print(order)
#輸出[{`no`: 1, `age`: 18}, {`no`: 2, `age`: 20}, {`no`: 3, `age`: 19}]

key中還可以使用函式

下面的例子是求按列表中元素與51的距離的大小排序。

order=[98,183,37,122,14,124,65,67]
def f2(a):
    return abs(53-a)
order = sorted(order,key=lambda x:f2(x))
print(order)
#輸出[65, 67, 37, 14, 98, 122, 124, 183]

 

(3)reverse引數

接受False 或者True 表示升序或降序。

True代表降序。

 

注意:sorted不會直接修改傳進去的可迭代物件,需要用一個新的物件去存它return的結果。

result = sorted(list)

相關文章