首页 > 解决方案 > 查看一个项目是否直接跟在列表中的另一个项目之后(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”。不能完全弄清楚如何让它工作。

标签: pythonlistindexingwhile-loop

解决方案


除了@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

推荐阅读