私は自分の言語のすべての単語(1行に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
ただし、ファイルの最初の単語(単語が逆ではない)の後で、反復が停止しているようです。
誰かが私がこれを修正する方法を知っていますか?
問題は、それword
がイテレータであり、チェックreverse in words
がそれを使い果たすことです。したがって、for
ループの次の反復では、使用可能な要素がそれ以上ない(イテレーターが使い果たされている)ため、反復が停止します。
list
またはのset
代わりに使用できます。
words = set(map(str.rstrip, open(...).readlines()))
次に、すでに示したように残りのコードを実行します。
順序が重要な場合list
は、反復にaset
を使用し、チェックにaを使用できます(セットのメンバーシップテストは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)
回文は2つのセットの共通部分であるため、2つのセットを使用することもできます。1つは単語用、もう1つは逆単語用です。
with open(...) as fh:
words = set(map(str.rstrip, fh))
words_reversed = set(x[::-1] for x in words)
palindromes = words & words_reversed
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加