2013-10-08 40 views
-1

我有兩個列表。內容可能會有所不同。我最好的方法來檢查並返回True如果兩個列表具有相同的內容。例如:[3,4,5][4,3,5]然後必須返回True檢查兩個列表的內容是否相同的最佳方法?

這是我的嘗試。

>>> x=[3,4,5] 
>>> y=[4,3,5] 
>>> x==y 
False 
>>> x is y 
False 
>>> x in y 
False 

它不工作, 但是當我試圖用這些它sort()工作:

>>> x.sort() 
>>> y.sort() 
>>> x==y 
True 

是,這是正確的方法?任何比這更好的東西?

+0

散列值是這樣做的一種方式 – smac89

+0

您的列表是否可以包含任何重複項? – TerryA

+0

內容是什麼? 'int'? –

回答

3

你已經擁有的更好的方法之一,以確定是否兩個列表中的內容是相同的。

如果您的條件是內容必須相同,但訂單是可選的,那麼使用sort()並對它們進行比較是非常好的解決方案。

或者你可以做一個方法,不涉及排序兩個列表,然後再比較它們。這假定列表包含int s。但是對於其他數據類型可以做類似的事情。

使用Counter您不需要對它們進行排序,並且可以確保它們具有相同數量的每個元素。

>>> from collections import Counter 
>>> a = [1,2,3,4] 
>>> b = [4,3,2,1] 
>>> Counter(a) == Counter(b) 
True 
+1

這似乎確實是最好的方法,如果物品是可散列的,就是'O(n)'。接下來最好的是對可以命令bot不散列的項目進行排序,即'O(n log(n))'。最後的方法是'O(n^2)'如果項目不可排序並且不能排序。請參閱上述重複報告的[獲勝答案](http://stackoverflow.com/a/7829388/2647279)。 –

0

您可以根據set這裏: set(x) == set(y)

+2

如果一個列表是'[1,2,3]'而另一個列表是'[1,1,2,3]' – TerryA

+0

,則不正確!你是對的。 –

相關問題