0

本 think python からこの演習を試みていました。ファイルから単語リストを読み取り (セクション 9.1 を参照)、アナグラムであるすべての単語のセットを出力するプログラムを作成します。

私の戦略は、ファイルを取得し、各単語をソートして、文字列のリスト (listy と呼ばれる) に保存することです。次に、元の単語リストをもう一度調べて、listy と比較します。同じ場合、ソートされた単語をキーとして保存し、元のファイルのソートされていない単語を値として辞書に保存します。次に、各キーの下のすべての値を単純に出力します。それらはアナグラムでなければなりません。

私が作成した最初の関数は、listy を生成することでした。コードを分解してチェックしたところ、問題ないようです。ただし、コンパイルして実行すると、無限ループに遭遇したかのように Python がハングします。なぜそうなのか誰か教えてもらえますか?

def newlist():
    fin = open('words.txt')
    listy = []
    for word in fin:
        n1 = word.strip()
        n2 = sorted(n1)
        red = ''.join(n2) 
        if red not in listy:
            listy.append(red)

    return listy

newlist()
4

1 に答える 1

0

a を使用しsetて、単語が前処理されているかどうかを確認します。

def newlist():
    with open('words.txt') as fin:
        listy = set()
        for word in fin:
            n1 = word.strip()
            n2 = sorted(n1)
            red = ''.join(n2)
            listy.add(red)
    return listy

newlist()

次のように書くこともできます。

def newlist():
    with open('words.txt') as fin:
        return set(''.join(sorted(word.strip())) for word in fin)

newlist()
于 2013-09-26T09:07:53.963 に答える