使用 Python List 排序:深入學習比較函數與最新排序方法(2025 版)

目錄

Python List 使用比較函數排序

Python 是一種非常流行的程式語言,其 list 是一種常用的資料結構,能夠讓我們快速存取與操作資料。排序 list 中的資料是常見需求,Python 提供了多種便捷的方式來進行排序,特別是使用比較函數。

什麼是比較函數?

比較函數是一個接受兩個參數並回傳整數的函數。其回傳值用於比較兩個參數的大小:

  • 如果第一個參數大於第二個參數,則回傳正數。
  • 如果第一個參數小於第二個參數,則回傳負數。
  • 如果兩個參數相等,則回傳 0。

使用 sorted() 函數進行排序

在 Python 中,我們可以使用 sorted() 函數來對 list 進行排序。以下是使用比較函數的範例:


def cmp(a, b):
    if a > b:
        return 1
    elif a < b:
        return -1
    else:
        return 0

my_list = [3, 5, 2, 1, 4]
sorted_list = sorted(my_list, key=cmp_to_key(cmp))

print(sorted_list)
# [1, 2, 3, 4, 5]

在上述程式碼中,我們定義了一個比較函數 cmp(),並使用 sorted() 函數對 list 進行排序。注意,從 Python 3.0 開始,sorted() 函數不再接受比較函數,取而代之的是使用 key 參數搭配 functools.cmp_to_key() 來進行排序。

使用 key 參數進行排序

Python 也提供了 key 參數,能夠指定用於排序的欄位。這樣可以對 list 中的物件進行靈活的排序。以下是範例:


from functools import cmp_to_key

def get_name(obj):
    return obj.name

class Person:
    def __init__(self, name):
        self.name = name

persons = [
    Person('Bob'),
    Person('Alice'),
    Person('John')
]

sorted_persons = sorted(persons, key=get_name)

for person in sorted_persons:
    print(person.name)
# Alice
# Bob
# John

在這段程式碼中,我們定義了一個 Person 類別,並創建了一個 persons 的 list。使用 get_name() 函數來取得 Person 物件的 name 屬性,最後使用 sorted() 函數進行排序,結果存放在 sorted_persons 中。

錯誤排除與延伸應用

在進行排序時,常見的錯誤包括:

  • 未導入 functools 模組導致 cmp_to_key 無法使用。
  • 比較函數未正確回傳整數,會導致錯誤的排序結果。

建議在使用比較函數時,仔細檢查傳入的參數類型,確保其可比較性。

總結

Python 提供了方便的比較函數與排序方法,能夠讓開發者輕鬆地對 list 進行排序。我們可以定義自己的比較函數,或是利用 key 參數來指定排序依據,讓排序任務變得簡單而靈活。

Q&A(常見問題解答)

1. 在 Python 中,如何定義自己的比較函數?

回答:您可以定義一個接受兩個參數並根據需求回傳整數的函數,然後使用 functools.cmp_to_key() 將其轉換為適合 sorted() 使用的格式。

2. 為什麼我的排序結果不正確?

回答:請檢查您的比較函數是否正確回傳整數值,並確保傳入的參數類型是可比較的。

3. 如何對自訂物件進行排序?

回答:您可以使用 key 參數來指定一個函數,該函數能夠從物件中提取用於排序的屬性值。
---

發佈留言