在下面的代码中,连接是瓶颈。 如您所见,我已经尝试了一些复杂的方法来加快速度,但无论如何它都很慢。我想知道我是否可以做些什么来让它更快。
顺便说一下,plain 和 secret 都是从二进制文件中读取的数据,它们都很大(大约 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
最佳答案
Python 的列表追加复杂度为 O(1),至少在摊销意义上是这样。您可以构建一个大列表,然后在最后加入它们,而不是在最里面的列表中进行连接。这会将您的算法从 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)
关于python - 如何加速 Python 中的字符串连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289777/