Что делает 9-ая строка, где "elif s[:i] + s[i + 1:] == (s[:i] + s[i + 1:])[::-1]:"? Подробно пожалуйста

s = input()
i = 0
j = len(s) - 1
while i < j and s[i] == s[j]:
    i += 1 # Поиск двух различных символов i и j, равноудалённых от концов строки
    j -= 1
if i >= j:
    print("строка – уже палиндром") # дело в шляпе
elif s[:i] + s[i + 1:] == (s[:i] + s[i + 1:])[::-1]:    
    print(i + 1) # можно удалить символ i
elif s[:j] + s[j + 1:] == (s[:j] + s[j + 1:])[::-1]:
    print("это j")
    print(j + 1) # можно удалить символ j
else:
    print(0) # а из него уже ничего не получиться( 

Ответы (1 шт):

Автор решения: gil9red

Смотрите, в этой строке s[:i] + s[i + 1:] == (s[:i] + s[i + 1:])[::-1] есть один повторяющийся код s[:i] + s[i + 1:] и срез [::-1].

s[:i] + s[i + 1:] это два среза строки с игнорированием символа, имеющего индекс i (s[:i] вернет строку, не включая индекс i, а с s[i + 1:] и так понятно), для наглядности:

s = '12345'
i = 2
print(s[:i] + s[i + 1:])
# 1245

А вот срез [::-1] используется только для возврата строки в обратном порядке:

s = '12345'
print(s[::-1])
# 54321
→ Ссылка