python排序函數sort()與sorted()區別

來源:互聯網
上載者:User

標籤:函數   nbsp   元素   key   屬性   class   正數   樣本   font   

sort是容器的函數:sort(cmp=None, key=None, reverse=False)

sorted是python的內建函數:sorted(iterable, cmp=None, key=None, reverse=False)

參數解析:

cmp:比較函數,比較什麼參數由key決定。例如:cmp(e1, e2) 是具有兩個參數的比較函數,傳回值:負數(e1 < e2);0(e1 == e2);正數( e1 > e2)。
key:用列表元素的某個屬性或函數作為關鍵字。
reverse:定序,可以選擇True或者False。
sorted多一個參數iterable:待排序的可迭代類型的容器

 

樣本1:

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]


>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> sorted(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> a
[1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]

區別:

對於一個無序的列表a,調用a.sort(),對a進行排序後返回a,sort()函數修改待排序的列表內容。

而對於同樣一個無序的列表a,調用sorted(a),對a進行排序後返回一個新的列表,而對a不產生影響。

 

樣本2:

假設用元組儲存每一個學生的資訊,包括學號,姓名,年齡。用列表儲存所有學生的資訊。

>>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]
>>> list1.sort()
>>> list1
[(2, ‘Mike‘, 22), (5, ‘Lucy‘, 19), (8, ‘Logan‘, 20)]


>>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]
>>> sorted(list1)
[(2, ‘Mike‘, 22), (5, ‘Lucy‘, 19), (8, ‘Logan‘, 20)]
>>> list1
[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]

小結:由樣本可以看出,當列表由list(或者tuple)組成時,預設情況下,sort和sorted都會根據list[0](或者tuple[0])作為排序的key,進行排序。

以上都是預設的排序方式,我們可以編寫代碼控制兩個函數的排序行為。主要有三種方式:基於key函數;基於cmp函數和基於reverse函數

1)基於key函數排序

>>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]
>>> list1.sort(key=lambda x:x[2])
>>> list1
[(5, ‘Lucy‘, 19), (8, ‘Logan‘, 20), (2, ‘Mike‘, 22)]


>>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]
>>> sorted(list1, key=lambda x:x[2])
[(5, ‘Lucy‘, 19), (8, ‘Logan‘, 20), (2, ‘Mike‘, 22)]
>>> list1
[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]

 

2)基於cmp函數

>>> list1=[(8, ‘Zogan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]
>>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>> list1
[(5, ‘Lucy‘, 19), (2, ‘Mike‘, 22), (8, ‘Zogan‘, 20)]

 

>>> list1=[(8, ‘Zogan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]
>>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1]))
[(5, ‘Lucy‘, 19), (2, ‘Mike‘, 22), (8, ‘Zogan‘, 20)]
>>> list1
[(8, ‘Zogan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)]

 

3)基於reverse函數

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

 

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=True)
>>> a
[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a.sort(reverse=True)

小結:reverse=False為升序排序;reverse=True為降序排序

 

python排序函數sort()與sorted()區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.