我通过调试代码找到了这个问题。我有一个字符串消息列表,想要将它们连接在一起,并在每条消息末尾添加换行符。
方法1:
这非常慢 - 在大约第100,000条消息后,每添加一条消息需要大约2-3秒钟,在第300,000条消息左右,这个过程基本上停止了。
方法2:
这种方法在不到一秒的时间内就完成了对160万条消息的拼接。
我想知道的是,为什么第二种方法比第一种方法快得多?
方法1:
total_str = ""
for m in messages:
total_str = total_str + m + "\n"
这非常慢 - 在大约第100,000条消息后,每添加一条消息需要大约2-3秒钟,在第300,000条消息左右,这个过程基本上停止了。
方法2:
total_str = ""
for m in messages:
tmp = m + "\n"
total_str = total_str + tmp
这种方法在不到一秒的时间内就完成了对160万条消息的拼接。
我想知道的是,为什么第二种方法比第一种方法快得多?
total_str += m + '\n'
比第一种方法更快。 - Aran-Feymessages.append("")
,然后'\n'.join(messages)
。 - juanpa.arrivillagaa + b + c
解释为(a + b) + c
,这会导致长字符串a
被复制两次。(而a + (b + c)
只需要复制一次) - Aran-Fey