поиск обратной строки в файле - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать скрипт, который просматривает файл, содержащий все слова моего языка (1 слово в строке), читает его и проверяет, является ли каждое отдельное слово в этом файле обратным в файле, в основном палиндромы и полуприцепы палиндромов

words = open('AllWords.txt', 'r')

for line in words:
    reverse = line[::-1]
    if reverse in words:
        print(reverse)
    if reverse not in words:
        continue

Однако, похоже, что после первого слова в файле (которое не является обратным в словах) оно прекращает итерацию.

Кто-нибудь знает, как я мог это исправить?

Ответы [ 3 ]

3 голосов
/ 22 марта 2019

Проблема в том, что 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
0 голосов
/ 22 марта 2019

Процесс будет довольно медленным, если в вашем файле много слов.Вы можете получить результаты намного быстрее, используя операции над множествами:

words = open("Allwords.txt").read().split("\n")
palindromes = set(words).intersection(w[::-1] for w in words)
for palindrome in palindromes: print(palindrome)
0 голосов
/ 22 марта 2019
words = open('AllWords.txt', 'r').readlines()

for line in words:
    reverse = line[::-1]
    if reverse in words:
        print(reverse)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...