Python3快速查找集合中的任何元素是字符串的子串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python3快速查找集合中的任何元素是字符串的子串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2238字,纯文字阅读大概需要4分钟。
内容图文
![Python3快速查找集合中的任何元素是字符串的子串](/upload/InfoBanner/zyjiaocheng/750/4fc8dcddaad0439c8e7e615935188fbc.jpg)
如果我有一个字符串集合,那么有一个数据结构或函数可以提高检查集合中的任何元素是否是我的主字符串上的子字符串的速度?
现在我循环遍历我的字符串数组并使用in运算符.有更快的方法吗?
import timing
## string match in first do_not_scan
## 0:00:00.029332
## string not in do_not_scan
## 0:00:00.035179
def check_if_substring():
for x in do_not_scan:
if x in string:
return True
return False
## string match in first do_not_scan
## 0:00:00.046530
## string not in do_not_scan
## 0:00:00.067439
def index_of():
for x in do_not_scan:
try:
string.index(x)
return True
except:
return False
## string match in first do_not_scan
## 0:00:00.047654
## string not in do_not_scan
## 0:00:00.070596
def find_def():
for x in do_not_scan:
if string.find(x) != -1:
return True
return False
string = '/usr/documents/apps/components/login'
do_not_scan = ['node_modules','bower_components']
for x in range(100000):
find_def()
index_of()
check_if_substring()
解决方法:
不,没有更快的内置方式.
如果您要测试大量的字符串,那么最好使用第三方Aho-Corasick软件包,如J.F. Sebastian’s answer所示.
使用内置方法,最糟糕的情况是:没有匹配,这意味着您已经测试了列表中的每个项目以及每个项目中的几乎每个偏移量.
幸运的是,in运算符非常快(至少在CPython中)并且在我的测试中速度快了近三倍:
0.3364804992452264 # substring()
0.867534976452589 # any_substring()
0.8401796016842127 # find_def()
0.9342398950830102 # index_of()
2.7920695478096604 # re implementation
这是我用于测试的脚本:
from timeit import timeit
import re
def substring():
for x in do_not_scan:
if x in string:
return True
return False
def any_substring():
return any(x in string for x in do_not_scan)
def find_def():
for x in do_not_scan:
if string.find(x) != -1:
return True
return False
def index_of():
for x in do_not_scan:
try:
string.index(x)
return True
except:
return False
def re_match():
for x in do_not_scan:
if re.search(string, x):
return True
return False
string = 'a'
do_not_scan = ['node_modules','bower_components']
print(timeit('substring()', setup='from __main__ import substring'))
print(timeit('any_substring()', setup='from __main__ import any_substring'))
print(timeit('find_def()', setup='from __main__ import find_def'))
print(timeit('index_of()', setup='from __main__ import index_of'))
print(timeit('re_match()', setup='from __main__ import re_match'))
内容总结
以上是互联网集市为您收集整理的Python3快速查找集合中的任何元素是字符串的子串全部内容,希望文章能够帮你解决Python3快速查找集合中的任何元素是字符串的子串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。