找到列表中最小的重复段

Tót*_*más 5 python python-3.x

我有一些整数列表,如:

l1 = [8,9,8,9,8,9,8], 
l2 = [3,4,2,4,3]
Run Code Online (Sandbox Code Playgroud)

我的目的是把它切成最小的重复片.所以:

output_l1 = [8,9]
output_l2 = [3,4,2,4]
Run Code Online (Sandbox Code Playgroud)

每次序列未完全完成的最大问题.所以没有

"ABCABCABCABC ..."

只是

'abcabcab'.

Tót*_*más 0

解决方案

target = [8,9,8,9,8,9,8]
length = len(target)
result = []
results = [] * length
for j in range(1, length):
    result = []
    while len(result) < length:
        for i in target[:j]:
            result.append(i)
    results.append(result)
final = []
for i in range(0, len(results)):
    if results[i][:length] == target:
        final.append(1)
    else:
        final.append(0)

if 1 in final:
    solution = results[final.index(1)][:final.index(1)+1]
else:
    solution = target

int(''.join(map(str, solution)))
Run Code Online (Sandbox Code Playgroud)

'结果:[8, 9]'。