2016-11-27 69 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