Python 在列表中查找模式
我正在尝试编写一个python脚本来查找列表中的模式 根据这份清单 [1,2,3,4,5,6,4,5,6,4,5,6,4,5,6,4,5,6] 脚本将确定4,5,6发生了3次,然后打印出来 3(4,5,6)Python 在列表中查找模式,python,Python,我正在尝试编写一个python脚本来查找列表中的模式 根据这份清单 [1,2,3,4,5,6,4,5,6,4,5,6,4,5,6,4,5,6] 脚本将确定4,5,6发生了3次,然后打印出来 3(4,5,6) 我希望如果有人在算法方面有什么见解(我只能想到n^2算法,在其中我检查大小为1、2、3的模式,等等,每次遍历字符串),或者是否有任何Python内置库可以帮助完成同样的事情。谢谢 您正在寻找的算法是。该算法的基本原理将告诉您如何检测序列中的模式并对其进行计数 游程编码(RLE)是一种非常简单
我希望如果有人在算法方面有什么见解(我只能想到n^2算法,在其中我检查大小为1、2、3的模式,等等,每次遍历字符串),或者是否有任何Python内置库可以帮助完成同样的事情。谢谢 您正在寻找的算法是。该算法的基本原理将告诉您如何检测序列中的模式并对其进行计数 游程编码(RLE)是一种非常简单的数据压缩形式 哪些数据运行(即,相同数据值的序列) 发生在多个连续的数据元素中)存储为单个数据元素 值和计数,而不是作为原始运行
下面是一篇关于的相关文章。在我脑海中,我会这样做:
以下是一个为模式匹配问题提供解决方案的函数:
import itertools
def pattern_match(pattern, sequence):
"""Count the number of times that pattern occurs in the sequence."""
pattern = tuple(pattern)
k = len(pattern)
# create k iterators for the sequence
i = itertools.tee(sequence, k)
# advance the iterators
for j in range(k):
for _ in range(j):
next(i[j])
count = 0
for q in zip(*i):
if pattern == q:
count += 1
return count
要解决上述问题,请拨打以下电话:
p = [4, 5, 6]
l = [1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]
count = pattern_match(p, l)
这里是一个完整的要点
(我认为正确的答案是,该模式重复4次,而不是问题中所述的3次。)
我不确定这个算法的复杂度是否真的小于O(n^2)。如果这是一个家庭作业,你应该指出这一点。必须证明n=np对家庭作业来说似乎有点苛刻。很抱歉回复太晚。这不是一个家庭作业回复,这是我在一个项目中遇到的编程问题。也没有什么可以证明的,在我用Python编写之前,我正在尝试使用智能伪代码。这不是O(n^2)为什么?我只想在一个列表中查找模式……对,我能想到的唯一算法是O(n^2)一个。至少一个优雅的O(n^2)算法可以……正确;它是O(n^2)。我认为只有当你能够约束它时(例如,如果你对长距离分隔的重复不感兴趣),算法才会有所改进。我或多或少地采用了这种方法,并提出了一些约束。@hop是的,我以前多次使用RLE技术检测文本字符串中的重复模式,您不需要做压缩部分,但是RLE背后的理论在这里100%适用。纯RLE假设您已经知道运行中的元素,而op特别希望找到这样一个重复组。