[英]More efficient way to concatenate strings base on two lists
想知道是否有更快的方法來基於兩個字符串列表生成一個字符串。 例如我有
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
對於給定的輸入,+ =似乎是最快的。
此版本可節省約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
我沒有像usingPlus
一樣包含return s
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];
希望這會有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.