2016-12-27 2 views
1

У меня возникла проблема с составлением словаря на языке python. Мой код проходит через каждое слово в документе объемом около 2,3 МБ и проверяет, находится ли оно в словаре, если оно нет, оно добавляется к спискуСамый быстрый способ проверить, есть ли элемент в списке - 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

слова на самом деле являются списком кортежей (n-граммов) –

ответ

4

Если вам нужно vocab иметь определенный порядок, вы можете просто сделать:

vocab = set(words) 
+0

, но что, если слово появляется более одного раза, это список слов. Я не хочу дубликатов в своем словаре. @AlexHall –

+0

@ N.Chalifour yup, у наборов нет дубликатов. –

+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() 
Смежные вопросы