Вывести только слова, у которых первая буква равна последней букве, без учета регистра

Код работает, но мне сказали, что есть и другие решения этой задачи.

s = input("Введите строку: ").split()
n = len(s)
print(n)
words = []
for word in s:
  if len(word) > 1:
      start = word[0].lower()
      finish = word[-1].lower()
      if start == finish:
          words.append(word)
if words:
    print(words)
else:
    print("В этом приложений", s, "нет слов, которые начинаются и заканчиваются одной и той же буквой")

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

Автор решения: u111
  1. Решение через списковое включение
inp = input('Введите строку!')
list_words = [
    x for x in inp.split()
    if len(x) > 1 and x[0].lower() == x[-1].lower()
]
if list_words:
    print(*list_words)
else:
    print(
        'В предложении', inp, 'нет слов, которые начинаются и заканчиваются с одной и той же буквой'
    )
  1. Посимвольное решение
inp = input('Введите строку!')
words = []
word = ''
for i in inp: # Проходимся по всем символам
    if i == ' ' and len(word) > 1:
        # Если символ - пробел, добавляем слово в список
        words.append(word) 
        word = ''
    else:
        # Иначе добавляем символ к слову
        word += i
# Обработка слова в конце предложения
if word:
    words.append(word)

filtered_words = []
for word in words:
    start = word[0].lower()
    finish = word[-1].lower()
    if start == finish:
        filtered_words.append(word)
if filtered_words:
    print(*filtered_words)
else:
    print('В предложении', inp, 'нет слов, которые начинаются и заканчиваются с одной и той же буквой')
→ Ссылка
Автор решения: Oopss
import re

s = input("Введите строку: ").lower()

matches = re.finditer(r'\b(\w)\w*\1\b', s)
words = [match.group() for match in matches]

if words:
   print(words)
else:
   print("В этом предложении", s, 'нет слов которые начинаются и заканчиваются с одной и той же буквой')
→ Ссылка