Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:speed for";在;vs正则表达式_Python_String_Runtime - Fatal编程技术网

Python:speed for";在;vs正则表达式

Python:speed for";在;vs正则表达式,python,string,runtime,Python,String,Runtime,确定较大字符串中是否存在子字符串的实例时 我正在考虑两种选择: (一) (二) 这两种方法中哪一种效率更高、速度更快(考虑到字符串的大小很大) 还有其他更快的选择吗 谢谢正则表达式将变慢 $ python -m timeit '"aaaa" in "bbbaaaaaabbb"' 10000000 loops, best of 3: 0.0767 usec per loop $ python -m timeit -s 'import re; pattern = re.compile("aaaa")

确定较大字符串中是否存在子字符串的实例时

我正在考虑两种选择:

(一)

(二)

这两种方法中哪一种效率更高、速度更快(考虑到字符串的大小很大)

还有其他更快的选择吗

谢谢

正则表达式将变慢

$ python -m timeit '"aaaa" in "bbbaaaaaabbb"'
10000000 loops, best of 3: 0.0767 usec per loop
$ python -m timeit -s 'import re; pattern = re.compile("aaaa")' 'pattern.search("bbbaaaaaabbb")'
1000000 loops, best of 3: 0.356 usec per loop
选项(1)肯定更快。对于未来,请执行以下操作来测试它:

>>> import time, re
>>> if True:
...     s = time.time()
...     "aaaa" in "bbbaaaaaabbb"
...     print time.time()-s
... 
True
1.78813934326e-05

>>> if True:
...     s = time.time()
...     pattern = re.compile("aaaa")
...     pattern.search("bbbaaaaaabbb")
...     print time.time()-s
... 
<_sre.SRE_Match object at 0xb74a91e0>
0.0143280029297
导入时间,重新导入 >>>如果为真: ... s=时间。时间() ... “bbbaaabbb”中的“aaaa” ... 打印时间。时间()-s ... 符合事实的 1.78813934326e-05 >>>如果为真: ... s=时间。时间() ... 模式=重新编译(“aaaa”) ... 模式搜索(“bbbaaabbb”) ... 打印时间。时间()-s ... 0.0143280029297
gnibbler的方法更好,我从来没有真正玩过解释器选项,所以我不知道这一个。

我碰巧手头有大肠杆菌基因组,所以我测试了这两个选项。。。使用选项(1)在大肠杆菌基因组中寻找“AAAA”10000000次(只是为了获得合适的时间)大约需要3.7秒。使用选项(2),当然是pattern=re.compile(“AAAA”)退出循环,大约需要8.4秒。 “dosomething()”在我的例子中是向任意变量添加1。
我使用的大肠杆菌基因组有4639675个核苷酸(字母)长。

中的语句将是最快的。正则表达式比简单地检查成员身份要复杂得多。。。在任何语言中…为什么
为True
?为什么用
time.time
对单个迭代计时而不使用
timeit
?@delnan不知道
timeit
,所以我使用
if
使其一次执行,因为我懒得创建文件。。。
$ python -m timeit '"aaaa" in "bbbaaaaaabbb"'
10000000 loops, best of 3: 0.0767 usec per loop
$ python -m timeit -s 'import re; pattern = re.compile("aaaa")' 'pattern.search("bbbaaaaaabbb")'
1000000 loops, best of 3: 0.356 usec per loop
>>> import time, re
>>> if True:
...     s = time.time()
...     "aaaa" in "bbbaaaaaabbb"
...     print time.time()-s
... 
True
1.78813934326e-05

>>> if True:
...     s = time.time()
...     pattern = re.compile("aaaa")
...     pattern.search("bbbaaaaaabbb")
...     print time.time()-s
... 
<_sre.SRE_Match object at 0xb74a91e0>
0.0143280029297