Python 如何根据字符串列表加速字符串匹配?

Python 如何根据字符串列表加速字符串匹配?,python,string,Python,String,我有一个字符串列表。我试图找出列表中的这些字符串是否出现在作为另一个列表存储的英语词典中 我观察到找到匹配项所需的时间呈线性增长。然而,当原始列表有几千个字符串时,它变得太长了 在我的开发EC2实例中,100个字符串需要~2秒,700个字符串需要~15秒,5000个字符串需要~100秒,40000个字符串需要~800秒 有没有办法加快速度?提前谢谢 matching_word = "" for w in all_strings: if w in engli

我有一个字符串列表。我试图找出列表中的这些字符串是否出现在作为另一个列表存储的英语词典中

我观察到找到匹配项所需的时间呈线性增长。然而,当原始列表有几千个字符串时,它变得太长了

在我的开发EC2实例中,100个字符串需要~2秒,700个字符串需要~15秒,5000个字符串需要~100秒,40000个字符串需要~800秒

有没有办法加快速度?提前谢谢

    matching_word = ""
    for w in all_strings:
            if w in english_dict:
                    if matching_word: # More than one possible word
                            matching_word = matching_word + ",  " + w
                    else:
                            matching_word = w

您可以使用列表理解,而不是创建字符串并对其进行扩展:

matching_words = [x for x in all_strings if x in english_dict]
现在,您可以使用
“,”从该列表生成字符串。join(匹配排序)

另一个选项-使用两个集合,您可以使用
&
运算符:

set(all_strings) & set(english_dict)

这里的结果将是一个集合,其中包含两个列表中的项目。

如果您没有内存问题,请将
english\u dict
转到
set
(如果您确实有内存问题,请首先将词典作为
set
加载):
english\u dict=set(english\u dict)
(当然,在循环之前)


这将大大加快查找速度。如果这还不够的话,你将不得不求助于创建搜索树和类似的搜索优化。

在最后一个集合交叉点上的一个注释将破坏找到的单词的顺序,因此如果顺序很重要,那么在将字典转换为集合后,应使用第一个示例(列表理解),当然,谢谢你,德克尔提供的解决方案。不幸的是,理解列表也花了同样的时间。但是你猜怎么着,你给出的集合解是超快速的。谢谢你的帮助。我可以用set解决方案解决性能问题。现在它是邪恶的快!!!事实上,我的英语口述非常小(只有15k个条目),而max(所有字符串)是3628800。现在使用sets只需要不到一秒钟的时间。如果
所有字符串
都那么大,并且您不需要保留顺序,那么一定要将
所有字符串
英语单词
都转换成集合(甚至更好-将它们作为集合加载),并使用
所有字符串。交叉点(英语单词)
。是的,这就是我最后做的。对于w-in-set(所有字符串)和set(英语单词)来说,速度惊人。