我有一个名为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
目前上述情况非常缓慢,我怀疑有办法加快速度。想法?
答案 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'。使用更少的内存,并且更快。