天天看點

python sort和sorted函數

老規矩,先看help幫助資訊,

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -, , 

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
           

可見,這兩個函數有以下差別:

  1. 最直白的一點差別就是sort是在原清單上修改,而sorted則是傳回新的清單
  2. sort是list清單的方法,而sorted則是内置的方法
  3. 由于sorted函數是内置,且操作對象為iterable對象,這就決定sorted的使用範圍比sort更廣

看實際例子,

#sort函數
>>> a=[,,,,,]
>>> a
[, , , , , ]
>>> a.sort()
>>> a
[, , , , , ]        #排序後清單發生變化
>>> a.sort(reverse=True)  #反向排序
>>> a
[, , , , , ]
#sorted函數
>>> b=[,,,,,]
>>> sorted(b)
[, , , , , ]    #排序後的輸出
>>> b
[, , , , , ]    #原清單并未改變
           

再看下清單元素為tupe時的操作,

>>> a=[('Kobe', ), ('Jordan', ), ('T-mac', )]
>>> a.sort()
>>> a
[('Jordan', ), ('Kobe', ), ('T-mac', )]
>>> a.sort(key=lambda x: x[])
>>> a
[('T-mac', ), ('Jordan', ), ('Kobe', )]
>>> b=[('Kobe', ), ('Jordan', ), ('T-mac', )]
>>> b
[('Kobe', ), ('Jordan', ), ('T-mac', )]
>>> sorted(b)
[('Jordan', ), ('Kobe', ), ('T-mac', )]
>>> sorted(b, key=lambda x: x[])
[('T-mac', ), ('Jordan', ), ('Kobe', )]
>>> 
           

由此可知,對于tupe類元素,在排序時可以選擇以哪個域作為排序關鍵詞,這也是我們平時比較常用的功能。