sort與sorted的區別


描述

        我們需要對List進行排序,Python提供了兩個方法對給定的List L進行排序 :
        方法1.用對List的成員函數sort進行排序
        方法2.用內置函數sorted進行排序(從2.4開始)

-------------------------------------------------sorted--------------------------------------------------------

        sorted() 函數對所有可迭代的對象進行排序操作
>>> help(sorted)

Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)

    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customize the sort order, and the
    reverse flag can be set to request the result in descending order.

--------------------------------------------------sort---------------------------------------------------------

        sort() 函數用於對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數
>>> help(list.sort)
Help on method_descriptor:

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

----------------------------------------------參數說明-----------------------------------------------------

原型:sort(key,reverse=False)

key:用來指定一個函數,此函數在每次元素比較時被調用,此函數代表排序的規則,也就是你按照什么規則對你的序列進行排序;

reverse:是用來表明是否逆序,默認的False情況下是按照升序的規則進行排序的,當reverse=True時,便會按照降序進行排序。

注;一般來說,cmp和key可以使用lambda表達式

sort 與sorted的區別

sort()與sorted()的不同在於,sort是在原位重新排列列表,而sorted()是產生一個新的列表。

sort 是應用在 list 上的方法,sorted 可以對所有可迭代的對象進行排序操作。

list 的 sort 方法返回的是對已經存在的列表進行操作,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作

示例:

示例一


>>> 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不產生影響。

 示例二


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

>>> 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函數

 基於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)]

 基於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為降序排序

 博客搬運地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM