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