Python列表的排序指南

2022-06-27 17:03:09 字數 3631 閱讀 4031

sorted()

sorted()函式是python中的內建函式,它可以從乙個可迭代物件構建出乙個新的列表。

a = [4, 28, 3, 22, 9, 6]

b = sorted(a)

print("a:", a) # 原列表

print("b:", b) # 排序後的列表

結果如下

a: [4, 28, 3, 22, 9, 6]

b: [3, 4, 6, 9, 22, 28]

可以看出,用sorted()函式排序後原列表元素順序不變,而新的列表則按公升序排序。

如果只是做簡單的列表公升序排序,可以直接使用sorted()方法來實現。

list.sort()

list.sort()是python列表的乙個內建方法,它跟sorted()方法不同的是,它會直接修改原列表。

a = [6, 3, 9, 7, 11, 2]

a.sort()

print(a)

結果如下

[2, 3, 6, 7, 9, 11]
原列表中元素的順序發生了改變。

reversed()

reversed()函式返回乙個反轉的迭代器

a = [6, 3, 9, 7, 11, 2]

b = reversed(a) # 反轉的迭代器

c = list(reversed(a)) # 迭代器轉換成列表

print("a:", a)

print("b:", b)

print("c:", c)

結果如下

a: [6, 3, 9, 7, 11, 2]

b: c: [2, 11, 7, 9, 3, 6]

reversed()函式用在列表中會返回乙個迭代器物件,可以使用list()方法將迭代器轉換為列表

list.reverse()

list.reverse()也是python列表的乙個方法,用於反向列表的元素,和reversed()函式差不多

a = [6, 3, 9, 7, 11, 2]

a.reverse()

print(a)

結果如下

[2, 11, 7, 9, 3, 6]
型別list.sort(),它也會直接改變原列表的元素順序

random.shuffle()

在random庫中有乙個shuffle()方法可以將列表的所有元素進行隨機排序

a = [1, 2, 3, 4, 5, 6]

random.shuffle(a)

print(a)

結果如下

[4, 3, 6, 2, 1, 5]
原列表的元素順序被隨機打亂

上面介紹了python中常用的排序方法,其中sorted()方法還有很多比較實用的地方。

重要引數說明

sorted(iterable, key=none, reverse=false)
其中:

iterable-- 可迭代物件

key-- 關鍵函式

reverse-- 排序規則,reverse = true 降序 , reverse = false 公升序(預設)。

對可迭代物件進行排序

list.sort()方法只是為列表定義的,而sorted()方法可以接受任何可迭代物件。

我們嘗試對乙個字典進行sorted()排序

a = 

b = sorted(a)

print(b)

結果如下

[3, 4, 6, 9]
得到的結果是乙個列表(其實就是dict.keys()列表,字典中的鍵列表)

實際上,sorted()函式是不能對字典進行排序的,因為在python中字典是無序的。

如果實在想得到乙個有序字典,你可以使用collections模組中ordereddict()來生成乙個有序字典。

關鍵函式

sorted()中的形參key是用於指定排序前對列表中的每個元素進行呼叫的函式。

a = 'whatever is worth doing is worth doing well'

b = sorted(a.split(), key=str.lower)

print(b)

結果如下

['doing', 'doing', 'is', 'is', 'well', 'whatever', 'worth', 'worth']
上面的key=str.lower是先對列表中的每乙個變成小寫字母的單詞進行比較,再對原列表進行公升序排序。

key形參的值是乙個函式,它接收乙個引數並返回乙個用於排序的鍵

def last(t):

"""t引數是乙個元組,返回元組中的最後乙個元素"""

return t[-1]

a = [

('tony', 'a', 90),

('lisa', 'c', 88),

('jack', 'b', 95),

]b = sorted(a, key=last)

print(b)

結果如下

[('lisa', 'c', 88), ('tony', 'a', 90), ('jack', 'b', 95)]
以上例子的key值是乙個last函式,用於獲取元組中最後乙個元素,而a列表中的元素是格式相同的元組,

因此通過last函式可以獲取列表中的每乙個元組最後乙個元素,也就是90, 88, 95這三個值來比較,公升序排序後就得到最後的結果。

同樣,我們的key值也可以使用lambda表示式形式,簡化以上過程如下

a = [

('tony', 'a', 90),

('lisa', 'c', 88),

('jack', 'b', 95),

]b = sorted(a, key=lambda t: t[-1])

print(b)

結果跟上面的一樣

上面只是對形參key的使用進行了簡單的演示,你也可以用在其他方面,如一些具有命名屬性的物件。

還可以使用operator模組函式來使訪問器功能更容易、更便捷,這裡就不過多演示了,有興趣可以自行搜尋相關資料。

公升序和降序

最後就是reverse引數,用於決定列表公升序還是降序排序。

a = [4, 3, 9, 6, 28, 22]

b = sorted(a, reverse=true)

print(b)

結果如下

[28, 22, 9, 6, 4, 3]
設定reverse=true就可以對列表進行降序排序。

python 列表排序 python列表排序有哪些

python列表排序 1 氣泡排序,是一種簡單的排序演算法,它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來 2 插入排序,通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。1 氣泡排序 氣泡排序 bubble sort 是一種簡單的排序...

《Python資料科學指南》 1 22 列表排序

我們先討論列表排序,然後擴充套件到對其他可迭代物件的排序。排序有兩種方法,第1種是使用列表裡內建的sort函式。第2種是使用sorted函式。我們通過示例來進行說明。我們來看看如何使用sort和sorted函式。先看一小段 對給定的列表進行排序 a 8,0,3,4,5,2,9,6,7,1 b 8,0...

python列表的排序

列表排序有三種方法 reverse 方法 sort 方法 sorted 方法。1.reverse 列表反轉排序。把原列表中的元素順序從左至右反轉過來重新存放,而不會對列表中的引數進行排序整理,即不會根據大小排序。eg list1 d 6,e 5,f 4 list1.reverse list1 4,f...