我有点"有点"或" qqqw"并希望在英语单词列表中找到它(它是否存在,在列表中)。
如果我有list of str
,那么
is_exists = s in english_list
如果我们有大量单词,这种方法很慢。我认为需要某种数据结构或算法来使这更快更有效
那我该怎么做呢,有什么建议吗?
答案 0 :(得分:2)
这是一个很好的比较: https://wiki.python.org/moin/TimeComplexity
你需要的可能是一套。
答案 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)
答案 2 :(得分:0)
我在其他主题中找到了答案。对不起,我没先找到它。
我需要使用bisect
模块和函数bisect_left
。它可以快速查找列表中的项目,排序列表。
它在巨大的名单上很快。