不按顺序比较2个列表

时间:2015-10-31 10:38:10

标签: python list function python-3.x for-loop

我想比较2个列表,比如AB

A = [1,2,3]
B = [3,1,2]

我想写一个函数来检查A中的所有项目是否都存在于B中 即,对于上面的例子,函数应该返回True 注意:我的列表中的项目是不可清除的对象。

为此,我写了这段代码:

for elem in A:
    if elem not in B:
        return False
return True

代码工作正常 但是我想要一种更高效,更灵巧的方式来做到这一点。

3 个答案:

答案 0 :(得分:4)

您可以使用all

all(i in B for i in A)

示例:

>>> A = [1,2,3]
>>> B = [3,1,2]
>>> all(i in B for i in A)
True
>>> B = [3,1,4]
>>> all(i in B for i in A)
False
>>> 

答案 1 :(得分:1)

你可以使用Counter,它在O(n)时间内运行。

from collections import Counter

A = [1,2,3]
B = [3,1,2]

print(Counter(A) == Counter(B)) # Prints True

答案 2 :(得分:0)

我认为使用 set 是此任务的一个很好的解决方案:

In [2]: A = [1,2,3]

In [3]: B = [3,1,2]
In [5]: set(A)==set(B)
Out[5]: True

此代码具有O(n)复杂度,您可以查看更多信息this link

如果您不想使用套装,可以尝试对列表进行排序:

def cmp(A,B):
  A1 = sorted(A)
  B1 = sorted(B)
  for item in A1:
    if binary_search(B1,item)==-1:
        return False
  for item in B1:
    if binary_search(A1,item)==-1:
        return False
  return True