首頁 >後端開發 >Python教學 >如何有效率比較無序列表的物件?

如何有效率比較無序列表的物件?

Linda Hamilton
Linda Hamilton原創
2024-11-27 06:12:13307瀏覽

How to Efficiently Compare Unordered Lists of Objects?

無序列表的高效比較

比較無序列表(也稱為包)可能是一項具有挑戰性的任務,尤其是在使用對象而不是整數等簡單資料型時。以下是解決此問題的三種有效方法:

1. Counter 方法(O(n))

對於可雜湊的物件(即,可以轉換為唯一的雜湊值),可以使用Python 集合模組中的Counter() 方法。它創建一個類似字典的對象,其中鍵是列表的元素,值是它們各自的計數。使用此方法比較兩個清單的線性時間複雜度為 O(n),其中 n 是列表的長度。

import collections

def compare(s, t):
    return collections.Counter(s) == collections.Counter(t)

2。排序方法 (O(n log n))

如果清單中的物件是可比較的(即它們具有定義的順序),則對清單進行排序可以提供有效的比較機制。 Python 中的sorted() 方法會將清單中的元素排序,因此可以輕鬆確定兩個清單是否包含任意順序的相同元素。此方法的時間複雜度為 O(n log n),其中 n 為列表的長度。

def compare(s, t):
    return sorted(s) == sorted(t)

3。相等比較 (O(n * n))

如果物件既不可散列也不可排序,一個簡單的方法是在兩個列表的元素之間執行相等比較。對於第一個清單中的每個元素,我們將其從第二個清單中刪除。如果在第二個清單中找不到第一個清單中的任何元素,則比較失敗。這種方法的最壞情況時間複雜度為 O(n * n),其中 n 是列表的長度。

def compare(s, t):
    t = list(t)  # make a mutable copy
    try:
        for elem in s:
            t.remove(elem)
    except ValueError:
        return False
    return not t

透過利用這些有效的比較技術,您可以有效地比較無序列表的對象,無論它們是可散列的、可排序的還是兩者都不是。

以上是如何有效率比較無序列表的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn