python-字符串的join要比+操作效率高

本文对比了Python中使用'+'操作符和.join()方法进行字符串拼接的性能差异,解释了字符串不可变性及其对内存消耗的影响,并提供了将字符串转换为可变列表以优化性能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

#-*- coding: utf-8 -*-
from time import time
def plus_test():
    t = time()
    s = ''
    for i in xrange(1000000):
        s += 'test'
    print(time() - t)
def join_test():
    t = time()
    li = []
    for i in xrange(1000000):
        li.append('test')
    s = ''.join(li)
    print(time() - t)

plus_test()
join_test()

数据

函数运行时间
plus_test()1.06100010872
join_test()0.110999822617

原因

字符串对象是不可改变的,也就是说在python创建一个字符串后,你不能把这个字符中的某一部分改变。任何上面的函数改变了字符串后,都会返回一个新的字符串,原字串并没有变。

所以上面的例子中,任何对字符串的操作包括’+’操作符都将创建一个新的字符串对象,而不是改变原来的对象.因此N个字符串相加必将丢弃中间N-1个结果,而列表不同,列表是可以改变的,因此前面使用list的append,再使用join还原成字符串,只内建了一次,节省了很多资源和时间。

字符串不可改变的现象其实这也是有变通的办法的,可以用S=list(S)这个函数把S变为由单个字符为成员的list,这样的话就可以使用S[3]=’a’的方式改变值,然后再使用S=” “.join(S)还原成字符串。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值