优化了之前的代码,使查询更快
a = [1,2,4, 11,12,14, 21,22,24, 31,32,34, 41,27,37,47,67, 1,2,4, 11,12,14, 21,22,24, 31,32,34, 41,27,37,47,67]
data = []
for i in range(1,len(a)):
data.append( a[i]-a[i-1] )
datalen = len(a)
i = 0
def check(data, i, winlen):
for j in range(winlen):
if data[i+j] != data[i+j+winlen]:
return i
return check(data, i+winlen, winlen)
while i<datalen:
for winlen in range( 1, (datalen-i)//2 ):
if data[i] == data[i+winlen]:
end = check(data, i, winlen)
if i != end:
print(i, end, winlen)
i = end + winlen - 1
break
i += 1
输出结果:
0 9 3
13 14 1
17 26 3
30 31 1
0 是起点 9是终点,3是片段长度,表示 1,2,4, 11,12,14, 21,22,24, 31,32,34 这串数字是按规律排序的