我正在处理一个列表列表,其中每个列表中都有非完美平方根的连分数周期。
我试图用它们做的是检查每个列表中最大重复模式的大小。
例如一些列表:
[
[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
它们都采用列表的大小并从当前位置比较它的索引大小。问题是第一个仅针对一个重复数字返回错误,因为它开始很大并且看到的只是一个大模式。第二个的问题是存在嵌套模式,如第六个和第七个示例列表,它将满足嵌套循环并忽略模式的其余部分。