拼接字符串优先使用join而不是+

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值