- 我刚刚解析了一个大文件,我创建了一个包含42.000个字符串/单词的列表.我想查询[反对此列表]以检查给定的单词/字符串是否属于它.所以我的问题是:
这种查找最有效的方法是什么?
第一种方法是对列表(list.sort())进行排序,然后使用
>> if word in list: print 'word'
Run Code Online (Sandbox Code Playgroud)
这真是微不足道,我相信有更好的方法来做到这一点.我的目标是应用快速查找,查找给定字符串是否在此列表中.如果您对其他数据结构有任何想法,欢迎使用.然而,我想避免现在更复杂的数据结构,如Tries等.我有兴趣听到有关快速查找或任何其他python库方法的想法(或技巧)可能比简单更快地进行搜索in.
而且我想知道搜索项的索引
我的文件大致包含所有英文单词(~60k字,~500k字符).我想测试我收到的某个单词是否是"英文"(即如果这个确切的单词在列表中).
在Python中执行此操作的最有效方法是什么?
简单的解决方案是将文件加载到列表中并检查该单词是否在该列表中.列表可以进行排序,我相信这会将复杂性降低到O(logn).但是我不确定Python如何实现搜索列表,以及如果这么大的列表在内存中是否会有性能损失.我可以"滥用"我可以对单词长度设置上限的事实吗?(例如,说最长的一个是15个字符长).
请注意我在具有大量内存的计算机上运行应用程序,因此我对内存消耗的关注程度低于速度和CPU利用率.
谢谢
假设我有一个元组列表:
tuple_library = [('a', 'z', '1'), ('r', '3', 'b'), ('m', '1', 'l')]
Run Code Online (Sandbox Code Playgroud)
我想要做的是检查 tuple_library 中是否存在以下元组。
search_list = [('a','a','1'), ('m', '1', 'l')]
def search_the_tupple(t_lib, s_list):
for item in t_lib:
if item in s_list:
return(item)
print(search_the_tupple(tuple_library, search_list))
Run Code Online (Sandbox Code Playgroud)
如果 tuple_library 和 search_list 很小,则此代码可以正常工作,但是随着这两个项目的增加,完成它所需的时间也会更长。
我们如何解决这个问题?
我有一个包含~11,000个元素的python列表e.然后,我有索引列表p〜3000元的.
我想过滤e以仅保留p中指定的索引处的元素.
到目前为止,我正在使用简单的列表理解:
f = [x for i,x in enumerate(e) if i in p]
Run Code Online (Sandbox Code Playgroud)
但是,这种实现需要大约1秒.
这可能不会太多,但由于我必须为10,000个列表执行此操作,因此它将超过2个小时.然后,我必须再次重复这200个批次的10,000个列表,所以它真的太慢了.
知道如何以更快的方式达到相同的结果吗?