天天看點

list.sort 和 sorted

list.sort 方法會就地排序清單,也就是不會把原來清單複制一份。這也是這個方法傳回值是None的原因,提心你本方法不會建立一個清單。

(在這種情況下傳回 None 其實是 Python 的一個慣例: 如果一個函數或者方法對對象進行的是就地改動, 那它就應該傳回 None, 好讓調用者知道傳入的參數發生了變動, 而且并未産生新的對象。)

l = [3, 1, 2]
    print(id(l))    # 2078283081672
    print(l.sort()) # None
    print(id(l))    # 2078283081672
           

sorted 會建立一個清單作為傳回值。這個方法可以接受任何形式的可疊代對象作為參數, 甚至包括不可

變序列或生成器。

不管是 list.sort 方法還是 sorted 函數, 都有兩個可選的關鍵字參數。

reverse

        如果被設定為 True, 被排序的序列裡的元素會以降序輸出( 也就是說把最大值當作最小值來排序) 。 這個參數的預設值是False。

key

        一個隻有一個參數的函數, 這個函數會被用在序列裡的每一個元素上, 所産生的結果将是排序算法依賴的對比關鍵字。 比如說, 在對一些字元串排序時, 可以用 key=str.lower 來實作忽略大小寫的排序, 或者是用 key=len 進行基于字元串長度的排序。 這個參數的預設值是恒等函數( identity function) , 也就是預設用元素自己的值來排序。