Python 如何匹配列表中的精确匹配
如何检查B是否以相同的连续顺序出现在A中?在下面的示例中,Python 如何匹配列表中的精确匹配,python,list,Python,List,如何检查B是否以相同的连续顺序出现在A中?在下面的示例中,99、3、2就是这样的: A = [0, 3, 123, 0, 99, 3, 2, 1, 2, 33, 1, 76] B = [99, 3, 2] 一个失败的例子是: A = [0, 321, 99, 0, 3, 0, 2, 0] 由于99,3、2元素不会连续出现 我尝试过: if B in A: print("yes") else: print("NO") 这是失败的 谢谢大家,, Jemma可以与生成器表达式一
99、3、2
就是这样的:
A = [0, 3, 123, 0, 99, 3, 2, 1, 2, 33, 1, 76]
B = [99, 3, 2]
一个失败的例子是:
A = [0, 321, 99, 0, 3, 0, 2, 0]
由于99,3、2
元素不会连续出现
我尝试过:
if B in A:
print("yes")
else:
print("NO")
这是失败的
谢谢大家,,
Jemma可以与生成器表达式一起使用,用于将长度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)]
从索引i
开始创建长度b
的列表,并将其与b
进行比较,得到一个布尔值<如果生成的任何布尔值为True
或False
(如果所有值均为False
),则code>any将返回True
谢谢你,fab-你能告诉我吗:在(A[i:i+len(B)]中返回B,因为我在范围内(len(A)),特别是i:i+len(B),我理解len的长度,但其余的在我的head@NoobyD尝试运行“打印([A:i+len(B)],用于范围(len(A))]内的i”。A[i:i+len(B)]表示从长度len(B)的A[i]开始的A的子列表
def consecutive_in(B,A):
return B in (A[i:i+len(B)] for i in range(len(A)))