1

重複の可能性:
リストに別のリスト (辞書) の項目があるかどうかを確認するにはどうすればよいですか?

これは実際にはマークの宿題です。

プログラムの使用者は、文章を書き留める必要があります。プログラムよりも単語をチェックし、間違った単語を出力します (間違った単語が複数回表示された場合、プログラムはそれらを一度だけ出力する必要があります)。間違った単語は、文に現れる順序で印刷する必要があります。

これが私がやった方法です。しかし、問題が 1 つあります。組み込み関数がソートされているため、間違った単語が文に現れる順序と同じ順序で現れることはありません。リスト内の重複を削除する他の方法はありますか?

そして辞書はdictionary.txtからインポートされます!!

sentence=input("Sentence:")
dictionary=open("dictionary.txt", encoding="latin2").read().lower().split()
import re
words=re.findall("\w+",sentence.lower()) 

words=sorted(set(words)) 
sez=[]
for i in words:
     if i not in dictionary:
         sez.append(i)

print(sez)
4

4 に答える 4

2
words = filter(lambda index, item: words.index(item) == index, enumerate(words))

すべての重複を除外し、順序を維持します。

Thomas が指摘したように、これはかなり重いアプローチです。より多くの単語を処理する必要がある場合は、これを for ループに使用できます。

dups = set()
filtered_list = []
for word in words:
    if not word in dups:
        filtered_list.append(word)
        dups.add(word)
于 2012-10-21T10:04:47.727 に答える
1

リスト内の重複を削除するには、それらを辞書に追加します。ディクショナリには KEY:VALUE ペアが 1 つしかありません。

于 2012-10-21T10:00:57.103 に答える
0

OrderedSet レシピを使用できます。

@edit:ところで、辞書が大きい場合は、辞書リストをセットに変換することをお勧めします。リストの場合、O(n) ではなく、セット内の要素の存在を確認するのに一定の時間がかかります。

于 2012-10-21T10:08:35.853 に答える
0

この回答を確認する必要があります:

https://stackoverflow.com/a/7961425/1225541

彼の方法を使用して配列の並べ替えを停止words(行を削除words=sorted(set(words))) すると、期待どおりに動作するはずです。

于 2012-10-21T10:09:35.537 に答える