use*_*270 1 python string runtime
在判断较大字符串中是否存在子字符串的实例时,
我正在考虑两种选择:
(1)
if "aaaa" in "bbbaaaaaabbb":
dosomething()
Run Code Online (Sandbox Code Playgroud)
(2)
pattern = re.compile("aaaa")
if pattern.search("bbbaaaaaabbb"):
dosomething()
Run Code Online (Sandbox Code Playgroud)
两者中的哪一个更有效和更快(考虑到字符串的大小很大)??
有没有其他更快的选择?
谢谢
选项(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
Run Code Online (Sandbox Code Playgroud)
gnibbler 的做法更好,我从来没有真正使用过解释器选项,所以我不知道那个。
正则表达式会更慢。
$ 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
Run Code Online (Sandbox Code Playgroud)
我手头正好有大肠杆菌基因组,所以我测试了这两个选项...使用选项(1)在大肠杆菌基因组中查找“AAAA”10,000,000次(只是为了有合适的时间)大约需要3.7秒。使用选项(2),当然使用pattern = re.compile("AAAA") 退出循环,大约需要8.4 秒。在我的例子中,“dosomething()”是将 1 添加到任意变量。我使用的大肠杆菌基因组长度为 4639675 个核苷酸(字母)。
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |