2016-11-27 75 views
3

如何檢查A是否以相同的連續順序出現B的精確匹配?在下面的示例99, 3, 2處於在於確切方式:如何匹配列表中的完全匹配python

A = [0, 3, 123, 0, 99, 3, 2, 1, 2, 33, 1, 76] 

B = [99, 3, 2] 

A,其將失敗的一個例子是:

A = [0, 321, 99, 0, 3, 0, 2, 0] 

作爲99, 3, 2元件不連續出現。

我曾嘗試做:

if B in A: 
    print("yes") 
else: 
    print("NO") 

這種失敗。

謝謝大家, 傑馬

回答

2
def consecutive_in(B,A): 
    return B in (A[i:i+len(B)] for i in range(len(A))) 
+0

謝謝晶圓廠 - 你能好心勸我通過: 回報的B(A [1:1 + LEN(B)]爲我的range(LEN(A))) 尤其是I: + len(B) 我知道len爲lenghth,但其餘的只是混亂在我的腦海中 – NoobyD

+0

@NoobyD嘗試運行「print([A [i:i + len(B)] in range(len(A) )])「 – exprosic

+0

A [i:i + len(B)]表示從長度爲len(B)的A [i]開始的A的子列表, – exprosic

1

你可以使用any與發電機表達式的長度b的所有片與b比較:

>>> a = [0, 3, 123, 0, 99, 3, 2, 1, 2, 33, 1, 76] 
>>> b = [99, 3, 2] 
>>> any(b == a[i:i+len(b)] for i in range(len(a) - len(b) + 1)) 
True 
>>> a = [0, 321, 99, 0, 3, 0, 2, 0] 
>>> any(b == a[i:i+len(b)] for i in range(len(a) - len(b) + 1)) 
False 

range(len(a) - len(b) + 1)返回所有的子序列的可能起始位置與長度相同作爲bb == a[i:i+len(b)]創建從索引i開始的長度爲b的列表,並將其與b進行比較,結果爲布爾值。 any將返回True如果所有值爲False,如果生成的任何布爾值是TrueFalse