Обратите внимание, что если строка s 0 ... s n является палиндромом, то s 1 ... s n-1 также является палиндромом
Короче говоря, перебирайте в своем файле поиск по каждому действительному палиндрому длины 7 и длины 8 (благодаря @tobias_k, который отметил, что в противном случае вы получите только нечетные палиндромы), новместо того, чтобы печатать его, сохраните его индекс в отдельном списке.
for i in range(len(s) - 8):
t1 = s[i:i+7]
t2 = s[i:i+8]
if t1 == t1[::-1]:
index_table.append(i)
if t2 == t2[::-1]:
index_table.append(i)
#You have to ensure that the only substring of length 7 that goes unchecked isn't a palindrome
if s[-7:] == s[-7:][::-1]:
index_table.append(len(s) - 7)
Теперь, когда у вас есть «база» для всех будущих палиндромов, легко использовать упомянутые ранее рекурсивные отношения для построения всех других палиндромов.
for i in index_table:
n = 0
while (s[i-n] == s[i+6+n]):
print(s[i-n:i+6+n])