優化了之前的代碼,使查詢更快
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 這串數字是按規律排序的