2

我有一个字符串。我需要知道字符串中是否出现以下任何子字符串。

所以,如果我有:

thing_name = "VISA ASSESSMENTS"

我一直在做我的搜索:

any((_ in thing_name for _ in ['ASSESSMENTS','KILOBYTE','INTERNATIONAL']))

我正在浏览一长串 thing_name 项目,我不需要过滤,确切地说,只需检查任意数量的子字符串。

这是最好的方法吗?感觉不对,但我想不出更有效的方法来解决这个问题。

4

2 回答 2

1

你可以试试看re.search是否更快。类似的东西

import re
pattern = re.compile('|'.join(['ASSESSMENTS','KILOBYTE','INTERNATIONAL']))
isMatch = (pattern.search(thing_name) != None)
于 2013-08-19T19:29:16.410 回答
0

如果您的子字符串列表很小并且输入很小,那么使用 for 循环进行比较就可以了。

否则,我知道在字符串中搜索(大)子字符串列表的最快方法是构造单词列表的 DAWG,然后遍历输入字符串,保留 DAWG 遍历列表并在每次成功遍历时注册子字符串。

另一种方法是将所有子字符串添加到哈希表中,然后在遍历输入字符串时散列每个可能的子字符串(直到最长子字符串的长度)。

自从我在 python 中工作以来已经有一段时间了,我的记忆是在其中实现东西很慢。要走 DAWG 路线,我可能会将它实现为本机模块,然后从 python 中使用它(如果可能的话) . 否则,我会先做一些速度检查来验证,但可能会走散列表路线,因为 python 中已经有高性能的散列表。

于 2013-08-19T19:01:42.260 回答