Python中字符串为不可变对象,这个特性直接影响字符串的拼接效率。那么我们来比较下常见的两种字符串拼接方法的效率:
import timeit
strlist = ["test str" for n in range(100000)]
def join_test():
return "".join(strlist)
def plus_test():
result = ""
for i in strlist:
result = result + i
return result
if __name__ == "__main__":
jointimer = timeit.Timer("join_test()", "from __main__ import join_test")
print("jointime:", jointimer.timeit(number=100))
plustimer = timeit.Timer("plus_test()", "from __main__ import plus_test")
print("plustime:", plustimer.timeit(number=100))
运行结果为:
jointime: 0.10443764273613923
plustime: 1.3577977113891784
从结果可以看出join()
方法的效率是高于+
操作符的。这是因为在用操作符+
进行字符串拼接时,由于字符串为不可变对象,因此在每次执行+
操作时便会在内存中申请一块新的内存空间,将要拼接的两字符串复制到该内存中。因此当对N个字符串拼接过程中,会产生N-1个中间结果,每产生一个中间结果都需要申请和复制一次内存,从而影响执行效率。当N越大时,+
操作符效率就越低。
而使用join()
方法拼接字符串时,会首先计算所需要的总内存空间,然后一次性申请所需内存并将字符串序列中每个元素复制到内存中。所以字符串的拼接,尤其是大规模的字符串处理建议使用join。