我有一个字符串列表。我试图找到列表中的任何这些字符串是否出现在作为另一个列表存储的英语词典中。
我观察到找到匹配线性增长所需的时间。但是,当原始列表有几千个字符串时,它会变得太长。
在我的开发EC2实例中,100个字符串需要约2秒,700个字符串需要约15秒,5000个字符串需要约100秒,40000个字符串需要约800秒!
有没有办法加快速度?提前谢谢。
ActiveAdmin.register AgencyWorker do
config.sort_order = "lower(name_asc)"
答案 0 :(得分:5)
不是创建字符串并扩展它,而是可以使用列表理解:
", ".join(matching_sords)
现在,您可以使用&
从该列表中创建一个字符串。
另一个选项 - 使用两个集合可以使用set(all_strings) & set(english_dict)
运算符:
english_dict
此处的结果将是包含两个列表中的项目的集合。
答案 1 :(得分:5)
如果您没有内存问题,请将set
转为set
(如果您遇到内存问题,请先将字典加载为english_dict = set(english_dict)
) :#contact_form_home input[type=text], #contact_form_home input[type=email], #contact_form_home textarea, #contact_form_home input[type=submit] {
background-color: #009fe3;
border: 1px solid #fff;
color: #fff;
padding: 11px;
line-height: 1;
width: 100%;
}
(当然是在循环之前)
应该显着加快查找速度。如果这还不够,您将不得不求助于创建搜索树和类似的搜索优化。