我想比较2个列表,比如A
和B
。
A = [1,2,3]
B = [3,1,2]
我想写一个函数来检查A中的所有项目是否都存在于B中
即,对于上面的例子,函数应该返回True
注意:我的列表中的项目是不可清除的对象。
为此,我写了这段代码:
for elem in A:
if elem not in B:
return False
return True
代码工作正常 但是我想要一种更高效,更灵巧的方式来做到这一点。
答案 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