编写仅对特定数字序列返回true的Python 3函数

时间:2018-08-06 00:29:01

标签: python-3.x

我是Python的新手,大部分时间都是编程的新手。抱歉,如果这个问题听起来很简单:

我只是想编写一个Python 3函数,如果列表中存在特定的数字序列,则无论该数字是背靠背还是返回,都将返回true。例如,假设“ 0,0,7”,但是这些特定数字可能会嵌入更大的列表中,例如[4,0,5,0,6,7]。

我可以编写许多其他与列表一起使用的函数,但是这个问题困扰我,因为数字的位置不固定。

我曾在for循环中尝试过len(range),但遇到语法错误,也无法遵循逻辑。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您可以通过以下方法创建过滤列表:首先过滤掉大列表中不在子列表中的项目,这样您就可以轻松地在滚动窗口中迭代大列表以匹配子列表:< / p>

def is_in(sublist, large_list):
    subset = set(sublist)
    filtered = [i for i in large_list if i in subset]
    for i in range(len(filtered) - len(sublist) + 1):
        if filtered[i : i + len(sublist)] == sublist:
            return True
    return False
print(is_in([0, 0, 7], [4,0,5,0,6,7]))
print(is_in([0, 0, 7], [4,0,5,6,7]))

这将输出:

True
False

答案 1 :(得分:0)

一种紧凑且相对有效的解决方案是遍历needle的元素,并始终尝试将其首次出现在haystack的其余部分中:

def istherehidden(needle,haystack):
    hsp=0
    try:
        for i in needle:
            hsp+=1+haystack[hsp:].index(i)
        return True
    except ValueError:
        return False

现在istherehidden([4,5,7],[4,0,5,0,6,7])返回True,然后istherehidden([5,4,7],[4,0,5,0,6,7])returns为假。 / p>