首页 > 解决方案 > 从序列中的另一个列表中搜索列表(不一定是相同的顺序)

问题描述

我有一个清单说:

l1 = [0, 1, 2]

l2 = [2, 1, 0, 1, 3, 2]

我运行了一个算法l2并得到l1了输出(我运行了前缀扫描算法,它是一种顺序模式挖掘)。现在我的任务是识别它的反面,即)从[0,1,2],我必须确定是否l2具有该模式。

最初我通过计算 l1 的索引并比较来尝试索引部分,但它会失败,因为 1,2 甚至在 0 之前出现。

知道我们如何解决这个问题吗?

输入:

l1 = [0, 1, 2]
l2 = [2, 1, 0, 1, 3, 2]

期望的输出:

l2 contains l1 (since 0, 1, 2 is present in l2)

注意:虽然 2,1 甚至出现在之前,但我们必须检查 0 之后是否以任何方式看到 1,2

标签: pythonlistsequence

解决方案


您的标题说顺序无关紧要,但您的描述暗示顺序确实很重要,但元素不必是连续的。在后一种情况下,按顺序查找每个元素,继续在列表的其余部分中搜索:

order = [0, 1, 2]
full = [2, 1, 0, 1, 3, 2]
part = full[:]

for val in order:
    if val in part:
        part = part[part.index(val)+1:]   # This is the step I think you're missing.
        print (val, "found", part)
    else:
        print("Sequencing failed")
        break

输出(带跟踪):

0 found [1, 3, 2]
1 found [3, 2]
2 found []

推荐阅读