我有一个字符串。我需要知道字符串中是否出现以下任何子字符串。
所以,如果我有:
thing_name = "VISA ASSESSMENTS"
我一直在搜索:
any((_ in thing_name for _ in ['ASSESSMENTS','KILOBYTE','INTERNATIONAL']))
我正在浏览一长串的thing_name项目,我不需要过滤,确切地说,只需检查任意数量的子字符串。
这是最好的方法吗?这感觉不对,但我想不出一个更有效的办法来解决这个问题。
答案 0 :(得分:1)
您可以尝试re.search
查看是否更快。
import re
pattern = re.compile('|'.join(['ASSESSMENTS','KILOBYTE','INTERNATIONAL']))
isMatch = (pattern.search(thing_name) != None)
答案 1 :(得分:0)
如果您的子串列表很小且输入很小,那么使用for循环进行比较就可以了。
否则,我知道在字符串中搜索(大)子串列表的最快方法是构造单词列表的DAWG,然后遍历输入字符串,保留DAWG遍历列表并在每个字符串中注册子字符串成功的遍历。
另一种方法是将所有子字符串添加到散列表中,然后在遍历输入字符串时散列每个可能的子字符串(最长子字符串的长度)。
自从我在python中工作已经有一段时间了,我的记忆是实现内容很慢。要进行DAWG路由,我可能会将其作为本机模块实现,然后从python中使用它(如果可能的话)。否则,我会先做一些速度检查来验证,但可能会去哈希表路由,因为python中已有高性能哈希表。