2016-03-01 159 views
-1

我有單詞「有點」或「qqqw」,並希望在英文單詞列表中找到它(它存在或不存在於列表中)。 如果我有list of str,然後如何快速查找英文​​單詞列表中的單詞?

is_exists = s in english_list 

這種方法是緩慢的,如果我們有一個龐大的單詞列表。我認爲需要某種數據結構或算法才能使這個更快,更高效

那麼,我該如何解決這個問題,有什麼建議?

回答

0

我發現其他話題的答案。對不起,我沒有找到它。

我需要使用bisect模塊和功能bisect_left。它可以快速找到列表中的項目,排序列表。 巨大的列表上很快。

+1

我很高興聽到您自己解決了您的問題。 –

1

正如已經建議創建一個set而不是list會更快。 對於「小」文件的數據,list似乎更快,但是一旦文件變大,訪問set就會比列表更快。
有這樣的測試:

from timeit import default_timer as timer 
import sys 
try: 
    lookfor = sys.argv[1] 
    pass 
except: 
    print "Program requires an word to look for" 
    sys.exit() 
wordset = set() 
wordlist = [] 
with open("your file name","r") as f: 
    for i in f.readlines(): 
     wordset.update(i.split()) 
     for x in i.split(): 
      wordlist.append(x) 
def testwords(word): 
    start= timer() 
    if word in wordset: print ("Yes word found") 
    else: print ("No word not found") 
    end= timer() 
    print ("Wordset",str(len(wordset))) 
    print (start,end,(end - start)*1000) 
    start= timer() 
    if word in wordlist: print ("Yes word found") 
    else: print ("No word not found") 
    end= timer() 
    print ("Wordlist",str(len(wordset))) 
    print (start,end,(end - start)*1000) 

testwords(lookfor)