这是一个速度问题。你知道吗
我有两条相同长度的弦x和y。在某些位置(索引),它们可能具有相同的字符(例如,“A”)。我希望去掉这些角色,把剩下的挤在一起。你知道吗
例如,用句点(“.”)表示非A字符:
x = "....A..A....AA...A"
y = ".A.....A....AA...."
new_x,new_y=f(x,y)应返回:
new_x = "....A.........A"
new_y = ".A............."
目前,我使用一个zip/unzip和一个join来实现这一点,如下面的代码片段所示。但我发现这对我的需要来说太慢了,因为我需要一次做几十万次:
import timeit
setup = '''
from itertools import izip
x = 20*"....A..A....AA...A" # my actual strings are length 300-400, thus the 20*
y = 20*".A.....A....AA...."
def f(x, y, two_As=("A", "A")):
new_x, new_y = izip(*(pair for pair in izip(x, y) if pair != two_As))
new_x = "".join(new_x)
new_y = "".join(new_y)
'''
>>> timeit.timeit('f(x, y)', setup=setup, number=int(1e5))
8.456903219223022
我试过的几件事并没有加快速度。缓存是一个选项(尽管您可能已经猜到,它并不总是相同的两个字符串!),但似乎这是一个非常简单的操作,如果方法正确,可能会大大加快速度。你知道吗
(我注意到大约80%的时间是由压缩/解压占用的,只有20%的时间是由随后的“.join()调用占用的,但是如果这也能加快速度,我洗耳恭听。)
我可以想象/不合理地希望这整件事不超过10微秒(100000个电话约1秒)。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐