如何在Python中加速字符串连接?

2024-06-16 18:06:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,连接是瓶颈。 正如你所看到的,我已经尝试了一些复杂的方法来加速这个过程,但无论如何它都非常缓慢。我想知道有什么我能做的使它变快。在

顺便说一句,普通和秘密都是从二进制文件中读取的数据,它们相当大(大约1mb)

x = b''
if len(plain) < len(secret*8):
    return False
i = 0

for secByte in secret:
    for j in range(8):
        z = setBit(plain[i],0,getBit(secByte,j))
        #x += bytes([z])
        x = x.join([b"", bytes([z])])
        #x = array.array("B",(int(z) for z in x.join([b"", bytes([z])]))).tostring()
        i = i+1

Tags: 方法代码inforsecretlenbytes过程
2条回答

Python的列表有O(1)append,至少在摊销意义上是这样。你可以加入最里面的一个列表,而不是做最里面的一个。这将把你的算法从O(N^2)变成O(N)。如果不知道setBit()和getBit()函数在做什么,就很难给您提供可工作的代码,但是如下所示:

L = []
for secByte in secret:
    for j in range(8):
         z = ...
         L.append(z)
x = b"".join(L)

我认为你根本不应该使用字符串连接。最好创建最终数据的完整大小的可变bytearray,然后设置每个字节。这完全是O(N),对于您正在做的事情,使用bytearray比字符串操作自然得多:

x = bytearray(len(secret)*8)   # creates an array of zero bytes
i = 0
for secByte in secret:
    for j in range(8):
        x[i] = setBit(plain[i], 0, getBit(secByte, j))
        i += 1

相关问题 更多 >