查找大型列表是否包含特定字符串的最有效方法(Python)

Roe*_*ler 8 python string

我的文件大致包含所有英文单词(~60k字,~500k字符).我想测试我收到的某个单词是否是"英文"(即如果这个确切的单词在列表中).

在Python中执行此操作的最有效方法是什么?

简单的解决方案是将文件加载到列表中并检查该单词是否在该列表中.列表可以进行排序,我相信这会将复杂性降低到O(logn).但是我不确定Python如何实现搜索列表,以及如果这么大的列表在内存中是否会有性能损失.我可以"滥用"我可以对单词长度设置上限的事实吗?(例如,说最长的一个是15个字符长).

请注意我在具有大量内存的计算机上运行应用程序,因此我对内存消耗的关注程度低于速度和CPU利用率.

谢谢

gim*_*mel 17

python Set是你应该尝试的.

set对象是不同的可哈希对象的无序集合.常见用途包括成员资格测试,从序列中删除重复项,以及计算数学运算,如交集,并集,差异和对称差异.

  • 你会期待set和frozenset之间的速度差异吗? (2认同)
  • 请注意,切换到"set"的改进可能很大.在我的情况下,检查1000次,如果一个元素属于270.000元素的列表没有重复,大约需要20-25秒.检查它是否属于一个集只需要大约0.005秒. (2认同)

Rom*_*yde 6

Python 代码示例:

L = ['foo', 'bar', 'baz'] # Your list
s = set(L)  # Converted to Set

print 'foo'  in s # True
print 'blah' in s # False
Run Code Online (Sandbox Code Playgroud)