2016-12-27 7 views
1

私はPythonで単語のボキャブラリを作るのに問題があります。私のコードは、約2.3MBの文書のすべての単語を調べ、その単語が辞書に含まれているかどうかを調べます。そうでなければ、リストに追加します。アイテムがリストにあるかどうかを確認する最速の方法 - Python

問題は、私はまだ完成させてもらえません)。これをどうすれば解決できますか?

コード:

words = [("_", "hello"), ("hello", "world"), ("world", "."), (".", "_")] # List of a ton of tuples of words 
vocab = [] 
for w in words: 
    if not w in vocab: 
     vocab.append(w) 
+1

あなたはそこにいくつの単語がありますか?なぜリストの代わりに 'set()'を使わないのですか? – Dekel

+0

あなたはあなたがチェックしている単語のコピーを提供できますか? – TheLazyScripter

+0

wordsは実際にはタプル(nグラム) –

答えて

4

あなたが特定の順序を持​​っているvocabを必要とする場合を除き、あなただけ行うことができます。

vocab = set(words) 
+0

のリストですが、複数の単語が単語リストに複数回現れた場合はどうなりますか?私は自分の語彙に重複したくない。 @AlexHall –

+0

@ N.Chalifourええ、セットに重複はありません。感謝! –

+0

ありがとう!それは魅力のように働いた。 –

1

次のループとset()のための実行時間を比較するためのテストです:

import random 
import time 
import string 


words = [''.join(random.sample(string.letters, 5)) for i in range(1000)]*10 # *10 to make duplicates! 

vocab1 = [] 

t1 = time.time() 
for w in words: 
    if w not in vocab1: 
     vocab1.append(w) 
t2 = time.time() 

t3 = time.time() 
vocab2 = set(words) 
t4 = time.time() 

print t2 - t1 
print t4 - t3 

出力:

0.0880000591278 # Using for loop 
0.000999927520752 # Using set() 
関連する問題