我有單詞「有點」或「qqqw」,並希望在英文單詞列表中找到它(它存在或不存在於列表中)。 如果我有list of str
,然後如何快速查找英文單詞列表中的單詞?
is_exists = s in english_list
這種方法是緩慢的,如果我們有一個龐大的單詞列表。我認爲需要某種數據結構或算法才能使這個更快,更高效
那麼,我該如何解決這個問題,有什麼建議?
我有單詞「有點」或「qqqw」,並希望在英文單詞列表中找到它(它存在或不存在於列表中)。 如果我有list of str
,然後如何快速查找英文單詞列表中的單詞?
is_exists = s in english_list
這種方法是緩慢的,如果我們有一個龐大的單詞列表。我認爲需要某種數據結構或算法才能使這個更快,更高效
那麼,我該如何解決這個問題,有什麼建議?
我發現其他話題的答案。對不起,我沒有找到它。
我需要使用bisect
模塊和功能bisect_left
。它可以快速找到列表中的項目,排序列表。 巨大的列表上很快。
這裏有一些不錯的比較:https://wiki.python.org/moin/TimeComplexity
你所需要的可能是一組。
正如已經建議創建一個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)
我很高興聽到您自己解決了您的問題。 –