Python 基于两个列表连接字符串的更有效方法
我想知道是否有一种更快的方法可以根据两个字符串列表生成一个字符串。比如我有Python 基于两个列表连接字符串的更有效方法,python,string,list,concatenation,Python,String,List,Concatenation,我想知道是否有一种更快的方法可以根据两个字符串列表生成一个字符串。比如我有 e = ['1','2','3'] op = ['+','*'] 我想得到“1+2*3” 假设我必须对不同大小的数组执行一千次左右的操作。有没有更快的办法得到我想要的答案 我尝试了几种方法,见下文。从我尝试的选项来看,使用+=似乎更好。我想知道是否有更快的方法 编辑:(还添加了一些建议) 对于给定的输入,+=似乎是最快的。 这个版本可以减少你10%的时间 import time def build_string(e,o
e = ['1','2','3']
op = ['+','*']
我想得到“1+2*3”
假设我必须对不同大小的数组执行一千次左右的操作。有没有更快的办法得到我想要的答案
我尝试了几种方法,见下文。从我尝试的选项来看,使用+=
似乎更好。我想知道是否有更快的方法
编辑:(还添加了一些建议)
对于给定的输入,+=似乎是最快的。
这个版本可以减少你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
我没有包括返回s
,因为usingPlus也没有
def build_string(e,op):
s=""
for idx,val in enumerate(op):
s+=e[idx]
s+=val
s+=e[-1]
在我的盒子上多刮一点时间向用户致意
如果可以的话,在以下情况下:当输入是两个字符串列表时,每个元素都是长度为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];
希望这将是有用的 我非常确定串接字符串是O(n),而附加到列表是O(1),因此我希望joinArray会随着列表长度的增加而变得更快。正如已经尝试过的那样,对于范围为(3000000)的I,这需要大约13秒的时间:string=e[randint(0,len(e)-1)]+op[randint(0,len(op)-1)]+e[randint(0,len(e)-1]是的,我忘了那里有退货,但它应该有。对于我的电脑来说,这个功能实际上需要3.2秒。你的电脑可能更快。无论如何,+=似乎仍然是我所需要的最好的字符串中的元素可以长于长度1,但是感谢您的输入。
z=z[2::5];