如何在 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 列表進行排序

在本節中,您將學習對字符串列表進行排序 - 示例受哈利波特啟發。

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 列表對象,並且是必需參數。
  • reversekey可選參數

注意:與僅作用於列表的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>)和可選的reversekey參數對列表進行就地排序。
  • 使用sorted(list, reverse = True | False, key = <func>)獲取列表的排序副本。

現在您已經學習瞭如何對 Python 列表進行排序,接下來了解 Python 中的列表推導。 或者您也可以學習如何在 Python 中處理文件或使用 JSON 文件。

您可以在 Geekflare Online Python 編譯器中嘗試上面給出的示例。