Python|检查一个列表是否包含在另一个列表中
给定两个列表 A 和 B,编写一个Python程序来检查列表 A 是否包含在列表 B 中而不破坏 A 的顺序。
例子:
Input : A = [1, 2], B = [1, 2, 3, 1, 1, 2, 2]
Output : True
Input : A = ['x', 'y', 'z'], B = ['x', 'a', 'y', 'x', 'b', 'z']
Output : False
方法#1:朴素的方法
一个简单的天真的方法是使用两个 for 循环并检查整个列表 A 是否包含在列表 B 中。如果在列表 A 中遇到这样的位置,则中断循环并返回 true,否则返回 false
# Python3 program to Check if a list is
# contained in another list without breaking order
def removeElements(A, B):
for i in range(len(B)-len(A)+1):
for j in range(len(A)):
if B[i + j] != A[j]:
break
else:
return True
return False
# Driver code
A = [1, 2]
B = [1, 2, 3, 1, 1, 2, 2]
print(removeElements(A, B))
输出:
True
方法#2:列表理解
一种更有效的方法是使用列表推导。我们首先用长度 A 初始化 'n'。现在使用 for 循环直到len(B)-n并检查每次迭代是否A == B[i:i+n]
。
# Python3 program to Remove elements of
# list that repeated less than k times
def removeElements(A, B):
n = len(A)
return any(A == B[i:i + n] for i in range(len(B)-n + 1))
# Driver code
A = [1, 2]
B = [1, 2, 3, 1, 1, 2, 2]
print(removeElements(A, B))
输出:
True
方法#3:使用连接和映射模块
这里我们使用join将两个列表连接到字符串,然后使用in运算符检查列表 A 是否包含在 B 中。
# Python3 program to Remove elements of
# list that repeated less than k times
def removeElements(A, B):
return ', '.join(map(str, A)) in ', '.join(map(str, B))
# Driver code
A = ['x', 'y', 'z']
B = ['x', 'a', 'y', 'x', 'b', 'z']
print(removeElements(A, B))
输出:
False