我想检查一个项目是否始终在列表中跟随另一个项目。我想出了这个非常陈腐的例子......假设我想检查以下列表中“a”后面是否总是跟着“b”:
list = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b']
然后,理想情况下,如果每次看到“a”时函数都会返回TRUE,则直接后跟“b”。谁能帮我这个?也许我在这里遗漏了一些非常简单的东西。
答案 0 :(得分:4)
all(a != 'a' or b == 'b' for a, b in zip(list[:-1], list[1:]))
答案 1 :(得分:2)
您可以将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