如何在英语单词列表中快速查找单词?

时间:2016-03-01 15:19:05

标签: python string search

我有点"有点"或" qqqw"并希望在英语单词列表中找到它(它是否存在,在列表中)。 如果我有list of str,那么

is_exists = s in english_list

如果我们有大量单词,这种方法很慢。我认为需要某种数据结构或算法来使这更快更有效

那我该怎么做呢,有什么建议吗?

3 个答案:

答案 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。它可以快速查找列表中的项目,排序列表。 它在巨大的名单上很快。