Python 在大量数字中寻找模式?

标签 python pattern-matching

<分区>

我正在处理一个列表列表,每个列表中都有非完全平方根的连分数周期。

我想用它们做的是检查每个列表中最大重复模式的大小。

例如一些列表:

[
 [1,1,1,1,1,1....],
 [4,1,4,1,4,1....],
 [1,2,10,1,2,10....],
 [1,1,1,1,1,4,1,4,1,20,9,8,1,1,1,1,1,4,1,4,1,20,9,8....],
 [2,2,2,4,2,2,2,4....],
 [1,1,1,13,21,45,3,3,1,16,4,1,4,1,1,1,24,15,1,1,1,13,21,45,3,3,1,16,4,1,4,1,1,1,24,15....],
 [1,1,1,3,28,1,1,1,3,28,67,25,1,1,1,3,28,1,1,1,3,28,67,25....]
]

我一直在使用的两种类似方法是:

def lengths(seq):
    for i in range(len(seq),1,-1):
        if seq[0:i] == seq[i:i*2]:
            return i


def lengths(seq):
    for i in range(1,len(seq)-1):
        if seq[0:i] == seq[i:i*2]:
            return i    

这些都采用列表的大小并从当前位置比较它的索引大小。 问题是第一个仅针对一个重复数字返回错误,因为它开始很大并且看到的只是一个大模式。 第二个问题是有像第六个和第七个示例列表这样的嵌套模式,它会被满足 使用嵌套循环并忽略模式的其余部分。

最佳答案

有效(在样本的第 4 个元素中发现错别字)

>>> seq_l = [
...  [1,1,1,1,1,1],
...  [4,1,4,1,4,1],
...  [1,2,10,1,2,10],
...  [1,1,1,1,1,4,1,4,1,20,9,8,1,1,1,1,1,4,1,4,1,20,9,8],
...  [2,2,2,4,2,2,2,4,2,2,2,4,2,2,2,4],
...  [1,1,1,13,21,45,3,3,1,16,4,1,4,1,1,1,24,15,1,1,1,13,21,45,3,3,1,16,4,1,4,1,1,1,24,15],
...  [1,1,1,3,28,1,1,1,3,28,67,25,1,1,1,3,28,1,1,1,3,28,67,25]
... ]
>>> 
>>> def rep_len(seq):
...     s_len = len(seq)
...     for i in range(1,s_len-1):
...         if s_len%i == 0:
...             j = s_len/i
...             if seq == j*seq[:i]:
...                 return i
...                 
... 
>>> [rep_len(seq) for seq in seq_l]
[1, 2, 3, 12, 4, 18, 12]

关于Python 在大量数字中寻找模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403905/

相关文章:

python - 在 Flask restful Swagger 的 UI 中隐藏端点

python - 为什么我不能像 Python 2 那样在 Python 3 中使用 __cmp__ 方法?

Haskell unicode 模式匹配

java - Java中正则表达式的部分匹配

go - 如何检查文件是否包含字符串?

python - 如何使用 numpy.correlate 进行自相关?

python - Stem Controller 的新身份不改变IP

java - 如何使用 Java 正则表达式根据某种模式模板分割字符串?

pattern-matching - 为什么这个结构在模式匹配后没有 move ?

python - python 将元素追加到 json 对象中