2013-10-08 41 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

,则不正确!你是对的。 –

相关问题