Проблема в том, что word
является итератором, а проверка reverse in words
исчерпывает его. Таким образом, для следующей итерации цикла for
больше нет доступных элементов (итератор исчерпан), и поэтому он прекращает итерацию.
Вы можете использовать вместо list
или set
:
words = set(map(str.rstrip, open(...).readlines()))
Затем выполните оставшуюся часть кода, как вы уже указали.
Если порядок имеет значение, то вы можете использовать list
для итерации и set
для проверки (членские тесты для наборов O (1)):
with open(...) as fh:
words = [x.rstrip() for x in fh]
word_set = set(words)
for word in words:
if word[::-1] in word_set:
print(word)
Вы также можете использовать два набора, так как палиндромы являются пересечением между двумя наборами, один для слов и один для обращенных слов:
with open(...) as fh:
words = set(map(str.rstrip, fh))
words_reversed = set(x[::-1] for x in words)
palindromes = words & words_reversed