2014-05-03 52 views
1

我該怎麼做?比較不同數量的物品列表

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

B in A = True 
A in B = False 

我嘗試了「中」比較,但在這兩種情況下,因爲它檢查是否列表B是A組中,而不是B的A.項目

是否有返回False簡單的方法來做到這一點使用旁邊有一個很長的,如果這樣的語句:

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

你的問題是有點模糊的,第一部分建議使用'in'但第二部分表明像比較元件通過索引來表示。 – Ffisegydd

回答

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 

因爲zip結束時,有在AB較短沒有更多的元素:

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一個子集。


編輯:如甲शwiniचhaudhary指出,集還具有issubset method

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

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

集合也有'issubset'方法:'set(B).issubset(A)' –