使用join而不是 + 来连接字符串

如果有大量的python字符串需要连接在一起,那么强烈建议你使用join, 而不是用+运算符。之所这样建议,并非+运算符无法胜任连接字符串的操作,而是出于性能考虑,下面这段代码测试拼接相同字符串时两种不同方法的性能

import random
import time


def get_random_str():
    lst = []
    for i in range(20):
        lst.append(chr(random.randint(97, 122)))

    return ''.join(lst)

str_lst = [get_random_str() for i in range(100)]

# 使用 + 拼接字符串
str_link = ""
t1 = time.time()
for item in str_lst:
    str_link += item
t2 = time.time()
print("使用+拼接字符串耗时: ", t2-t1)

# 使用join函数拼接字符串
str_link = ""
t3 = time.time()
str_link = ''.join(str_lst)
t4 = time.time()

print("使用join函数拼接字符串耗时: ", t4-t3)

程序输出结果

使用+拼接字符串耗时:  4.506111145019531e-05
使用join函数拼接字符串耗时:  1.9073486328125e-06

反复试验,join的性能是+运算符的20倍。造成这一差距的主要原因在于内存申请的方式不同。在使用+运算符时,每一次循环都需要为str_link申请新的内存,字符串是不可变对象,你不能继续使用str_link在内存中原有的区域,只能在完成计算后,为结果申请一片新的内存区域,然后让str_link指向它。使用join时,并不存在反复申请内存的情况,因为事先就已经知道有多少字符串需要拼接,那么可以一次性将内存申请好,存储拼接后的字符串。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案