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

f.r*_*ues 1 python comparison compare contains list

我怎样才能做到这一点?

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

B in A = True
A in B = False
Run Code Online (Sandbox Code Playgroud)

我尝试了'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
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

In [8]: all(a==b for a,b in zip(A,B))
Out[8]: True
Run Code Online (Sandbox Code Playgroud)

相当于

if B[0] == A[0] and B[1] == A[1] and B[2] == A[2]: 
    return True
else: return False
Run Code Online (Sandbox Code Playgroud)

因为zip在较短的A或中没有更多元素时终止B:

In [9]: zip(A, B)
Out[9]: [('fish', 'fish'), ('banana', 'banana'), ('old pajamas', 'old pajamas')]
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您希望测试是否所有元素A都在B,那么您正在寻找子集关系.如果你转换AB设置,那么你可以使用它的<=运算符:

In [12]: set(B) <= set(A)
Out[12]: True
Run Code Online (Sandbox Code Playgroud)

因为B是.的一个子集A.

In [13]: set(A) <= set(B)
Out[13]: False
Run Code Online (Sandbox Code Playgroud)

因为A不是其中的一个子集B.


编辑:正如Aशwiniचhaudhary指出的那样,套装也有一种issubset方法:

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

In [43]: set(A).issubset(B)
Out[43]: False
Run Code Online (Sandbox Code Playgroud)