python - 从序列中的另一个列表中搜索列表(不一定是相同的顺序)
问题描述
我有一个清单说:
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
解决方案
您的标题说顺序无关紧要,但您的描述暗示顺序确实很重要,但元素不必是连续的。在后一种情况下,按顺序查找每个元素,继续在列表的其余部分中搜索:
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 []
推荐阅读
- jquery - 如何在悬停时更改图像源?
- python - 为什么我的 prgram 在 Visual Studio 中没有时在 codechef ide 中显示运行时错误?
- python - 您可以将一行不同大小的行附加到数据框中吗?
- java - Spring Batch - 如何使用从 REST API 请求中收到的文件名启动作业
- keystonejs - 您可以过滤反向引用字段吗?
- r - 如何在 quanteda 中对加权 dfm 的列求和?
- windows - 如何使用带有一些多行文本的命令提示符在 Windows 中创建文件?
- acumatica - Acumatica 文档报告(发票)标题不显示页面标题中的值
- javascript - 如何在数组中找到最小值,不包括第一个索引
- javascript - jQuery 替换功能没有替换有效 HTML 中的文本?