如何匹配列表python中的完全匹配

时间:2016-11-27 14:32:42

标签: python list

如何检查B的完全匹配是否以相同的连续顺序出现在A中?在下面的示例中,A = [0, 321, 99, 0, 3, 0, 2, 0] 以完全相同的方式出现在A中:

99, 3, 2

A失败的例子是:

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

由于 spaceship cars boats "subway train" rocket bicycle "18 wheeler" 元素不会连续出现。

我尝试过:

words = string.split()

这失败了。

谢谢大家, 杰马

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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)返回与b长度相同的子序列的所有可能起始位置。 b == a[i:i+len(b)]从索引b开始创建一个长度为i的列表,并将其与b进行比较,得到一个布尔值。如果所有生成的布尔值均为anyTrue,则True将返回False,以防所有值均为False