比較無序列表(也稱為包)可能是一項具有挑戰性的任務,尤其是在使用對象而不是整數等簡單資料型時。以下是解決此問題的三種有效方法:
對於可雜湊的物件(即,可以轉換為唯一的雜湊值),可以使用Python 集合模組中的Counter() 方法。它創建一個類似字典的對象,其中鍵是列表的元素,值是它們各自的計數。使用此方法比較兩個清單的線性時間複雜度為 O(n),其中 n 是列表的長度。
import collections def compare(s, t): return collections.Counter(s) == collections.Counter(t)
如果清單中的物件是可比較的(即它們具有定義的順序),則對清單進行排序可以提供有效的比較機制。 Python 中的sorted() 方法會將清單中的元素排序,因此可以輕鬆確定兩個清單是否包含任意順序的相同元素。此方法的時間複雜度為 O(n log n),其中 n 為列表的長度。
def compare(s, t): return sorted(s) == sorted(t)
如果物件既不可散列也不可排序,一個簡單的方法是在兩個列表的元素之間執行相等比較。對於第一個清單中的每個元素,我們將其從第二個清單中刪除。如果在第二個清單中找不到第一個清單中的任何元素,則比較失敗。這種方法的最壞情況時間複雜度為 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中文網其他相關文章!