gpt4 book ai didi

python - 为什么python中的字符串拼接顺序对速度影响很大?

转载 作者:太空狗 更新时间:2023-10-30 02:37:15 25 4
gpt4 key购买 nike

我刚刚通过调试我的代码发现了这个问题。我有一个消息列表作为字符串,我试图将它们连接在一起,我想在每条消息的末尾添加一个换行符。

方法一:

total_str = ""
for m in messages:
total_str = total_str + m + "\n"

这非常慢——在大约第 100,000 条消息之后,添加每条消息大约需要 2-3 秒,大约在第 300,000 条消息之后,此过程基本停止。

方法二:

total_str = ""
for m in messages:
tmp = m + "\n"
total_str = total_str + tmp

这种方法在不到一秒的时间内完成了所有 160 万条消息的连接。

我想知道为什么第二种方法比第一种方法快得多?

最佳答案

a + b + c 不是连接 abc 的单个操作成一个字符串。是两个操作,t = a + bt + c,意思是复制a的内容两次;一次将 a 复制到 t 中,当 t 被复制到 t + c 的结果中时再次复制。因为在您的示例中,a 是不断变长的字符串,所以您最好将每一步复制的数据量加倍。

最好的方法是避免+创建的所有临时str对象,并使用join:

total_str = "\n".join(messages)

join 直接对每个字符串进行操作,无需一次一个地迭代地将它们附加到初始空字符串。 join 通过扫描 messages 计算出结果字符串需要多长,为其分配足够的内存,然后从 messages 的每个元素中顺序复制数据 一次放置一个位置。

关于python - 为什么python中的字符串拼接顺序对速度影响很大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com