Python 如何排序

2021-08-04 08:16:21 字數 2014 閱讀 7233

以下內容基本是從python3.6的幫助文件中摘取部分翻譯的

python內建的list.sort()方法可以原地修改列表,進行排序,同時還有sorted()內建方法對乙個可迭代物件進行排序,並返回排序後的列表。

基本排序

簡單的公升序排序非常簡單,只需呼叫sorted()函式

>>> sorted([2,3,5,48,7])

[2, 3, 5, 7, 48]

如果你不需要原來的列表,那麼直接使用list.sort()方法是更有效率的

>>> list1 = [3,2,1,9,8,7]

>>> list1.sort()

>>> list1

[1, 2, 3, 7, 8, 9]

list.sort()和sorted()的另乙個差異是list.sort()方法只適用列表,而sorted()方法可以接受任何可迭代物件作為引數

key函式

list.sort()和sorted都有乙個key引數用來指定乙個函式用來比較

例如:乙個大小寫不敏感的排序

>>> sorted("this is a test string".split(), key=str.lower)

['a', 'is', 'string', 'test', 'this']

在實際中處理的是更複雜的物件,例如:

>>> student_tuple = [

... ('zhangsan','a',15),

... ('lisi','b',12),

... ('wangwu','b',10),

>>>

>>> sorted(student_tuple,key=lambda student:student[2])

[('wangwu', 'b', 10), ('lisi', 'b', 12), ('zhangsan', 'a', 15)]

這種方法對類的屬性也適用

operator模組的函式

上面使用key函式作為引數是非常常見的,所以python提供了更方便的函式,operator模組有itemgetter(),attrgetter()和methodcaller()函式。

使用這些函式,上面的例子會變得非常簡單且高效。

>>> from operator import itemgetter,attrgetter

>>> sorted(student_tuple,key=itemgetter(2))

[('wangwu', 'b', 10), ('lisi', 'b', 12), ('zhangsan', 'a', 15)]

公升序和降序

list.sort和sorted()都接收乙個布林值的reverse引數,用來是否是降序(預設排序是公升序)。

>>> sorted(student_tuple,key=itemgetter(2),reverse=true)

[('zhangsan', 'a', 15), ('lisi', 'b', 12), ('wangwu', 'b', 10)]

老的方式使用cmp引數

在python2.4以前,python沒有sorted內建函式,list,sort()也沒有key引數,當時py2.0是使用cmp引數來處理特殊的排序的。

在py3.0中,cmp引數被完全移除。

在py2.0中,sort允許呼叫乙個函式用來做比較,例如:

>>> def numeric_compare(x,y):

... return x- y

...>>> sorted([5,2,4,1,3],cmp=numeric_compare)

[1, 2, 3, 4, 5]

python字典如何排序?

字典中的元素是沒有順序的,所以不可以用dic 0 來訪問,會報錯。因為字典中的鍵是唯一的所以可以用dic key 來訪問。那麼如何根據字典的 鍵 和 值 來進行排序?可以用sorted dic,value,reverse 函式,引數dic為需要比較的引數,value為排序物件 可選擇按鍵或值排序 r...

Python 如何優化氣泡排序

什麼叫氣泡排序法?相信有接觸過演算法的朋友多少都了解氣泡排序法,那麼什麼是氣泡排序法呢?氣泡排序,英文名稱 bubble sort 是一種基礎的交換排序演算法,在日常工作中經常會用到,例如 頁面資料需按時間先後排序,這本質上也是一種氣泡排序法。喝過可樂的朋友都知道,可樂裡面的氣泡會向上浮,這就是氣泡...

Python如何實現列表排序

python 列表排序 題目 班級同學的成績存放在列表中,list 523,435,712,566,613,675,620,689,643 請將列表內的成績從小到大進行排序。1 氣泡排序 基本思想 相鄰的兩個元素進行比較,然後把較大的元素放到後面 正向排序 在一輪比較完後最大的元素就放在了最後乙個位...