检查列表中的一个项目是否总是跟在另一个项目后面-Python

检查列表中的一个项目是否总是跟在另一个项目后面-Python,python,regex,list,Python,Regex,List,我想检查列表中的一个项目是否总是跟在另一个项目后面。我想出了一个非常老套的例子。。。假设我想检查下表中“a”后面是否总是跟着“b”: list = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b'] 然后,理想情况下,如果每次我们看到一个“a”,它后面紧跟着一个“b”,那么函数将返回TRUE。有人能帮我吗?也许我在这里遗漏了一些非常简单的东西。您可以将all与zip一起用于O(n)解决方案 all(a != '

我想检查列表中的一个项目是否总是跟在另一个项目后面。我想出了一个非常老套的例子。。。假设我想检查下表中“a”后面是否总是跟着“b”:

list = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b']

然后,理想情况下,如果每次我们看到一个“a”,它后面紧跟着一个“b”,那么函数将返回TRUE。有人能帮我吗?也许我在这里遗漏了一些非常简单的东西。

您可以将
all
zip
一起用于O(n)解决方案

all(a != 'a' or b == 'b' for a, b in zip(list[:-1], list[1:]))
itertools.islice
用于避免制作新列表的昂贵成本。您还可以按如下所示封装在函数中

from itertools import islice

def fun(lst, val1, val2):
    return all(j==val2 for i, j in zip(lst, islice(lst, 1, None)) if i==val1)

lst = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b']

res = fun(lst, 'a', 'b')

print(res)  # True

您可以将
all
zip
一起用于O(n)解决方案

itertools.islice
用于避免制作新列表的昂贵成本。您还可以按如下所示封装在函数中

from itertools import islice

def fun(lst, val1, val2):
    return all(j==val2 for i, j in zip(lst, islice(lst, 1, None)) if i==val1)

lst = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b']

res = fun(lst, 'a', 'b')

print(res)  # True

list
不是最佳名称,因为它与
list
内置类型冲突。
list
不是最佳名称,因为它与
list
内置类型冲突。哇,速度太快了。非常感谢!我现在可以回去工作了,哈哈:)@AshishAcharya然后你需要使用
而不是任何(…)
哇,那太快了。非常感谢!我现在可以回去工作了,哈哈:)@AshishAcharya那么你需要使用
而不是任何(…)