python - 查看一个项目是否直接跟在列表中的另一个项目之后(python)
问题描述
我想检查一个项目是否直接紧随列表中的另一个项目。我的代码有点工作,但是,如果我想查看“1”后面是否跟着“3”,如果列表变为 [1, 1, 3],它将无法工作。我尝试过使用 while 循环,但并没有真正让它发挥作用。到目前为止,这是我的代码:
def contains(lst, a, b):
x = 1
y = 0
for _ in lst:
while (lst.index(a)+y) == (lst.index(a)+x):
x += 1
y += 1
else:
if lst.index(b) == (lst.index(a) + x):
return True
else:
return False
我的计划是做一个while循环,检查“a”之后的项目是否与“a”具有相同的值,当值不再相同时,它将循环的最后一个值与下一个值进行比较并检查是否它等于“b”。不能完全弄清楚如何让它工作。
解决方案
除了@MarkMeyer 在评论中提到的选项之外,您还可以使用带有前瞻断言的正则表达式。
import re
def contains(data, a, b):
pattern = re.compile(r"{}(?={})".format(a, b))
if isinstance(data, list):
data = "".join(str(s) for s in data)
maybe_found = pattern.search(data)
if maybe_found:
return True
return False
contains(data, 1, 3)
>> True
contains(data, 1, 4)
>> False
contains(data, 1, 1)
>> True
推荐阅读
- javascript - How to record text changes in HTML within browser using JavaScript?
- angular - How to use angular loop variable in [style] of pFileUpload
- locust - 完成指定数量的用户任务时停止 Locust
- python-3.x - if __name__ == "__main__": SyntaxError 但写入正确
- html - 如何在按钮旁边添加图像
- d3.js - d3fc - 使用最新版本 14 进行捕捉的十字准线
- javascript - 使用 AJAX 执行通过 PHP 传递的 javascript 代码
- ios - Xcode 中的 OneSignal 连接错误
- laravel - 使用 Stripe 在 Laravel 6 中接受付款
- c++ - 递归函数中的return语句