将列表与不同数量的项目进行比较

时间:2014-05-03 19:21:32

标签: python list comparison compare contains

我该怎么做?

A = ['fish', 'banana', 'old pajamas', 'Mutton', 'Beef', 'Trout']
B = ['fish', 'banana', 'old pajamas']

B in A = True
A in B = False

我尝试了'in'比较器,但它在两种情况下都返回False,因为它检查List B是否在List A中,而不是A中的B项。

除了使用像这样的非常长的if语句之外,还有一种简单的方法吗?

if B[0] == A[0] and B[1] == A[1] and B[2] == A[2]: 
    return True
else: return False

1 个答案:

答案 0 :(得分:5)

In [8]: all(a==b for a,b in zip(A,B))
Out[8]: True

相当于

if B[0] == A[0] and B[1] == A[1] and B[2] == A[2]: 
    return True
else: return False

,因为当AB中较短的元素不再有zip时,issubset method会终止:

In [9]: zip(A, B)
Out[9]: [('fish', 'fish'), ('banana', 'banana'), ('old pajamas', 'old pajamas')]

另一方面,如果您希望测试A的所有元素是否都在B中,那么您正在寻找子集关系。如果您将AB转换为集合,则可以使用其<=运算符:

In [12]: set(B) <= set(A)
Out[12]: True

因为BA的一个子集。

In [13]: set(A) <= set(B)
Out[13]: False

因为A不是B的子集。


编辑:正如AVER winiचhaudhary所指出的那样,集合也有{{3}}:

In [42]: set(B).issubset(A)
Out[42]: True

In [43]: set(A).issubset(B)
Out[43]: False