Python - 结合一系列字符串的最快方法

时间:2017-10-10 21:48:55

标签: python string binary

我有一个名为indexes的大型列表。列表中的每个项目都是一个包含2个整数的元组。整数表示我想要连接成一个更大的字符串的一系列子串的起始和结束索引。

例如,如果indexes列表只有2个条目,如下所示:[(1, 5), (10,15)]我想要一个输出字符串,其中包含索引位置1和5之间的字符,以及之间的字符索引位置10-15 .... IE将这两个切片连接在一起。

更具体一点 - 我的主字符串实际上是大量十六进制值的字符串版本。我将最终将我的最终字符串转换回二进制版本,然后将其写入文件。目前我的进程在大型数据集上非常慢,如下所示:

def combineFrames(indexes, largeString):
    '''
    input1 = list of all indexes for start/end of substring
    input2 = the larger String from which the substrings are being pulled

    returns a single string that consists of all substrings concatenated together...

    function also generates a new file that consists of the binary version of the concatenated substrings
    '''

    final_string = ""

    for seq in indexes:
        final_string += hexString[seq[0]:seq[1]]

    fullFile = binascii.unhexlify(final_string)

    with open("d:\\output_File", 'wb') as f:
        f.write(fullFile)

    return fullFile

目前上述情况非常缓慢,我怀疑有办法加快速度。想法?

2 个答案:

答案 0 :(得分:4)

使用join通常是一种很好的方法来连接这样的字符串。可能看起来像这样:

final_string = "".join(hexString[seq[0]:seq[1]] for seq in indexes)

答案 1 :(得分:1)

"".join方法因为:

  

''。join通常比使用+好,因为像   “a”+“b”+“c”也将创建中间字符串“ab”,并且仅   那么“abc”,而''。join(['a','b','c'])将直接创建   'ABC'。使用更少的内存,并且更快。