如何在 Python 中對列表進行排序
已發表: 2022-03-30本文將教你如何在 Python 中對列表進行排序。
在 Python 中,您可以使用sort()方法對列表進行就地排序。 或者您可以使用內置的sorted()函數來獲取列表的排序副本。
在本教程中,您將學習:
-
sort()
方法和sorted()
函數的語法 - 列表升序和降序排序的代碼示例
- 使用
key
參數自定義排序 sort()
與sorted()
之間的區別
開始吧!
Python sort() 方法的語法
sort()
方法作用於 Python 列表。 它會對列表進行適當的排序,並修改原始列表。
Python 的sort()
方法的語法是:
<list>.sort(reverse = True | False, key = <func>)
現在讓我們解析上面的語法。
-
<list>
是任何有效的 Python 列表對象。 -
reverse
是一個可選參數,它採用 True 或 False。 -
reverse
的默認值為False
,列表按升序排序。 給True
以按降序對列表進行排序。 -
key
也是一個可選參數,設置為<func>
。 -
<func>
可以是內置函數,也可以是用戶自定義函數。
在下一節中,您將開始編寫簡單的示例。
如何按升序對 Python 列表進行排序
考慮列表nums
。 要按升序對列表進行排序,可以調用列表的sort()
方法。
運行以下代碼片段。
nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]
列表nums
進行了升序排序,修改了原始列表。 這稱為就地排序。
如何按降序對 Python 列表進行排序
要按降序對列表進行排序,請將reverse
設置為True
,如下所示。
nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]
您可以看到列表現在按降序排序。
如何在 Python sort() 方法中使用 key
在本節中,讓我們使用key
參數並自定義排序。
這裡, mod5()
是一個函數,它接受一個數字x
,並在數字x
除以 5 時返回餘數。
def mod5(x): return x % 5
我們想用上面的函數作為key
。
現在,運行以下代碼單元。
nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]
花點時間解析輸出。
請注意,您現在如何根據mod5
key
自定義排序,而不是常規排序。
- 現在除以 5 時留下最小余數的數字排在第一位。
- 除以 5 時留下最大餘數的數字是排序列表中的最後一個元素。
要驗證是否是這種情況,請運行以下代碼片段。
nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 5
5 正好除以 25,餘數為 0。所以這是排序列表中的第一個元素。 6 留下餘數 1,所以它是第二個元素,依此類推。 9 除以 5 後餘數為 4,它是排序列表中的最後一個元素。
與其定義單獨的函數,不如使用 lambda 函數。 在 Python 中,lambda 是單行匿名函數。 lambda args : expression返回在args上計算的表達式。
現在,讓我們使用 lambda 表達式重寫上述排序,如下所示。
nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]
到目前為止,您已經學習瞭如何對數字列表進行排序。 接下來,讓我們看看如何在 Python 中對字符串列表進行排序。
如何按字母順序對 Python 列表進行排序
在本節中,您將學習對字符串列表進行排序 - 示例受哈利波特啟發。

在我們的示例中, students
是霍格沃茨的學生列表。 我們想按照他們名字的字母順序對他們進行排序。
對字符串列表進行排序時,默認排序是按字母順序排列的。
students = ["Harry","Ron","Hermione","Draco","Cedric"]
讓我們打印出排序後的列表來驗證排序的結果。
students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']
如何以相反的字母順序對 Python 列表進行排序
為了按字母倒序對列表進行排序,請設置reverse
= True
,如下面的代碼片段所示。
students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']
從輸出中,您可以看到列表確實已按相反順序排序。
如何使用關鍵參數自定義排序
在本節中,讓我們使用可選的key
參數自定義排序。
考慮以下列表, houses
。
houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]
在這裡, houses
是一個字典列表。 每個字典包含兩個鍵值對,一個表示學生的姓名,另一個表示他們所屬的房子。
現在,我們想按照房屋所屬房屋的字母順序對列表房屋進行排序。
正如您現在可能已經猜到的那樣,我們應該將key
參數設置為特定學生的房子。
為了檢索每個學生的房子,您可以定義一個函數returnHouse()
,如下所示。
def returnHouse(student): return student['house']
此函數返回特定學生所屬的房子。

現在,您可以在房屋列表上調用sort()
方法,如圖所示。
houses.sort(key=returnHouse)
在下面的輸出中,請注意列表是如何按房子而不是學生姓名排序的。 這就是為什麼我們有格蘭芬多、赫奇帕奇和斯萊特林的原因——按字母順序排列。
print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]
要相應地定義key
參數,您還可以使用 lambda 函數。 對於每個列表項,此函數返回該列表項的房子。
運行以下代碼單元來驗證這一點。
houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]
在到目前為止的所有示例中,您都在列表上使用了sort()
方法。 現在您知道它修改了原始列表。
如果您想保留原始列表但獲得列表的排序副本怎麼辦?
好吧,在 Python 中,您可以使用sorted()
函數來執行此操作。
Python sorted() 函數的語法
sorted()
函數接受一個列表或任何集合作為參數。 它返回列表的排序副本——原始列表沒有被修改。
Python 的sorted()
函數的語法是:
<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)
請注意語法與我們之前看到的sort()
方法非常相似。
-
<list>
是任何有效的 Python 列表對象,並且是必需參數。 -
reverse
和key
是可選參數
注意:與僅作用於列表的
sort()
方法不同,sorted()
函數可用於對任何 Python 可迭代對象進行排序,例如列表、字符串和字典。
如何使用 sorted() 函數對 Python 列表進行排序
#1。 在此示例中, nums
是數字列表。
您可以使用nums
作為參數調用sorted()
函數。 並將其分配給列表sorted_nums1
。
nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]
在上面的輸出中,您可以看到默認情況下nums
已按升序排序。
另外,請注意原始列表nums
沒有被修改——因為sorted()
返回一個新列表。 這在下面得到驗證。
print(nums) # Output: [25, 13, 6, 17, 9]
#2 。 現在,將可選參數reverse
設置為True
並獲取sorted_nums2
。
如下面的代碼單元格所示, sorted_nums2
是一個新列表,其中的項目按降序排序。
sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]
#3。 在此示例中,讓我們使用字符串列表。
與前面的示例一樣,調用sorted()
函數會返回一個新列表。 並且項目按字母順序排序。
fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']
#4。 現在,讓我們使用可選的key
參數自定義排序。 將key
設置為len
。 這將根據字符串的長度對列表進行排序。
注意:在 Python 中,內置的
len()
函數接受任何可迭代對象,例如列表、字符串、元組等。 它返回可迭代的長度。
長度最短的字符串出現在排序列表的最前面,最長的字符串出現在排序列表的末尾。
fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']
在上面的輸出中,梨是最短的字符串,草莓是最長的字符串。
Python sort() 方法與 sorted() 函數
到目前為止,您已經學習瞭如何使用sort()
方法以及sorted()
函數。 在本節中,讓我們列舉這兩種方法之間的區別。
Python .sort() 方法 | Python sorted() 函數 |
對列表進行就地排序——修改原始列表 | 返回一個新的排序列表 |
僅適用於 Python 列表 | 適用於 Python 可迭代對象,例如列表、字符串和其他集合 |
返回類型為None | 返回可迭代的排序副本 |
加起來
我希望這個 Python 列表教程對您有所幫助。
讓我們快速總結一下我們所涵蓋的內容。
- 使用list.sort(reverse = True | False, key = <func>)和可選的reverse和key參數對列表進行就地排序。
- 使用sorted(list, reverse = True | False, key = <func>)獲取列表的排序副本。
現在您已經學習瞭如何對 Python 列表進行排序,接下來了解 Python 中的列表推導。 或者您也可以學習如何在 Python 中處理文件或使用 JSON 文件。
您可以在 Geekflare Online Python 編譯器中嘗試上面給出的示例。