想知道是否有更快的方法在两个字符串列表上生成字符串。例如,我有
e = ['1','2','3']
op = ['+','*']
我想得到"1+2*3"
假设我必须这样做一千次左右,使用不同大小的数组。有没有更快的方法来得到我想要的答案?
我尝试了几种方法,见下文。从我尝试的选项中,似乎使用+=
更好。想知道是否有更快的方法。
编辑:(添加了一些建议)
import itertools
def usingPlus(e,sign):
temp = ""
for num, operator in zip(e, sign):
temp += num
temp += operator
temp += e[-1]
return temp
def joinArray(e, sign):
temp = [ num+op for num, op in zip(e,sign) ]
temp.append(e[-1])
return "".join(temp)
def stringJoin(e, sign):
temp = ""
for num, operator in zip(e, sign):
temp.join(num)
temp.join(operator)
temp.join(e[-1])
return temp
def zip_longest(e, op):
arry = [x+y for x,y in itertools.zip_longest(e,op,fillvalue="")]
return "".join(arry)
def build_string(e,op):
s=""
for i in range(len(op)):
s+=e[i]
s+=op[i]
s+=e[-1]
return s
for i in range(3000000):
e = ['1','2','3']
op = ['+','*']
usingPlus(e,op) ## total ~2.7 sec
#joinArray(e,op) ## total ~3.4 sec
#stringJoin(e,op) ## total ~6.4 sec
#zip_longest(e,op) ## total ~4.1 sec
#build_string(e,op) ## total ~3.2 sec
答案 0 :(得分:0)
使用给定的输入+ =似乎最快。
这个版本可以减少10%的时间。
import time
def build_string(e,op):
s=""
for i in range(len(op)):
s+=e[i]
s+=op[i]
s+=e[-1]
e=['1','3','5','7']
op=['-','+','*']
start = time.time()
for x in range(3000000):
build_string(e,op)
end = time.time()
print end-start
我没有包含return s
,因为usingPlus
def build_string(e,op):
s=""
for idx,val in enumerate(op):
s+=e[idx]
s+=val
s+=e[-1]
在我的盒子上刮掉更多的时间
答案 1 :(得分:0)
问候用户,
如果我可以贡献,在以下情况下:当输入是两个字符串列表时,每个元素都是长度为1的字符串。
下面的功能可能会给出一个想法。这很简单。
def parity_string(x,y):
z=x+y; z[0::2]=x; z[1::2]=y; z=str(z);
z=z[2::5];
return z
这个想法首先制作相应的列表版本,然后将其转换为字符串。最后一部分将分析最终字符串对象的模式。
如果输入类似于您的示例,则最终字符串中的所需字符将具有索引序列(2,7,12,...)。然后只取这些索引的值。
z=z[2::5];
希望这会有用。