簡體   English   中英

根據兩個列表連接字符串的更有效方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM