1. 前言
Python 是一種簡單且直觀的程式語言,廣泛用於各種開發領域。其中「列表排序」是基本且經常使用的操作之一。本文將詳細介紹在 Python 中進行列表排序的方法,並說明如何進行自訂排序以及需要注意的重點。
閱讀本文後,即使是初學者也能掌握有效率地排序列表的方法,並能在實際開發中加以應用。
2. 列表的排序方法
在 Python 中主要有兩種排序方式。我們來看看它們的特點與使用方法。
2.1 使用 sort()
方法進行排序
sort()
是列表物件內建的方法,會直接修改原始列表的順序。預設情況下為升冪排序(由小到大),如果指定 reverse=True
則會變成降冪(由大到小)。
基本用法
numbers = [3, 1, 4, 1, 5]
numbers.sort()
print(numbers) # 輸出: [1, 1, 3, 4, 5]
降冪排序的寫法
numbers = [3, 1, 4, 1, 5]
numbers.sort(reverse=True)
print(numbers) # 輸出: [5, 4, 3, 1, 1]
2.2 使用 sorted()
函數進行排序
sorted()
函數會不改變原始列表,而是返回一個新的已排序列表。預設為升冪排序,也可以透過 reverse=True
改為降冪。
基本用法
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 輸出: [1, 1, 3, 4, 5]
print(numbers) # 輸出: [3, 1, 4, 1, 5] 原始列表未被改變
降冪排序的寫法
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # 輸出: [5, 4, 3, 1, 1]

3. 自定義排序(使用 key 參數)
在實際開發中,我們常常需要根據特定條件進行排序。這時可以使用 key
參數來指定排序的依據。例如,可以根據字串長度、物件屬性等進行排序。
根據字串長度排序
words = ["banana", "apple", "cherry", "date"]
words.sort(key=len)
print(words) # 輸出: ['date', 'apple', 'banana', 'cherry']
使用 lambda 表達式進行排序
也可以使用 lambda
表達式進行更靈活的排序邏輯。
numbers = [3, 1, 4, 1, 5, 9]
sorted_numbers = sorted(numbers, key=lambda x: -x)
print(sorted_numbers) # 輸出: [9, 5, 4, 3, 1, 1]
對複雜資料結構排序(例如字典列表)
data = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 35}
]
# 根據 age 進行排序
sorted_data = sorted(data, key=lambda x: x["age"])
print(sorted_data)
# 輸出:
# [{'name': 'Bob', 'age': 25},
# {'name': 'Alice', 'age': 30},
# {'name': 'Charlie', 'age': 35}]
4. sort() 和 sorted() 的差異
sort()
和 sorted()
都可以用來排序,但有以下幾點差異:
- sort() 是列表的方法:會直接修改原始列表。
- sorted() 是內建函式:不會改變原始資料,會返回一個新的列表。
根據使用場景的不同,可以選擇合適的方法。

5. TimSort 演算法的運作原理
Python 中的排序實作採用了名為 TimSort 的演算法。這是一種結合了 合併排序(Merge Sort) 和 插入排序(Insertion Sort) 的混合排序演算法。
TimSort 的優點是能夠根據資料的實際特性,自動選擇最有效率的排序方式。當資料部分已經排序時,它能有效提升整體的排序效能。
這種演算法的核心理念如下:
- 將列表分割為小區段(稱為 run)。
- 針對每個 run 使用插入排序。
- 最後將已排序的區段進行合併。
TimSort 最早由 Java 的工程師 Tim Peters 提出,並成為 Python 的預設排序演算法(從 Python 2.3 開始)。

6. 實用技巧與注意事項
以下是使用排序函式時實務上需要注意的一些要點:
6.1 不要混用不同資料型態
若列表中包含不同型別的元素(例如整數與字串),排序時可能會拋出錯誤。
mixed = [1, "apple", 3]
# 這樣會發生 TypeError,因為 int 與 str 不能比較
6.2 利用 key 與 lambda 實現進階排序
透過 key
參數與 lambda
表達式,可以根據多種條件進行排序,例如多層級排序(先依 A 欄位,再依 B 欄位)。
data = [
{"name": "Alice", "score": 80},
{"name": "Bob", "score": 90},
{"name": "Charlie", "score": 80}
]
# 先依照 score 降冪,再依照 name 升冪
sorted_data = sorted(data, key=lambda x: (-x["score"], x["name"]))
print(sorted_data)
7. 總結
本文介紹了 Python 中的列表排序方法,包含:
sort()
:會修改原始列表sorted()
:不會修改原始資料,會返回新的排序結果- 使用
key
與lambda
實現自定義排序 - 背後的 TimSort 演算法機制
根據實際情況靈活使用這些排序技巧,能大大提升開發效率與程式的可讀性。

Python 的排序功能強大又直覺,熟悉這些基本與進階技巧後,你將能應對各種實務情境中的資料處理需求。