Python中字符串连接,“+”的效率很低!

  1. 问题阐述:假如现在有两个字符串“Python”和“Ruby”,需要将这两个字符串连接起来,在Java或者C#中都可以通过使用“+”操作符将两个字符串连接一起,得到一个新的字符串“PythonRuby”。当然,Python中同样提供了利用“+”操作符连接字符串的功能,然而很不幸的是,这样的做法正是万恶之源
  2. “+”低效的原因:Python中通过“+”进行字符串连接的方法效率极其低下,其根源在于Python中的PyStringObject对象是一个不可变对象。这就意味着当进行字符串连接时,实际上是必须要创建一个新的PyStringObject对象。这样,如果要连接N个PyStringObject对象,那么就必须进行 N-1 次的内存申请及内存搬运的工作。毫无疑问,这将严重影响Python的执行效率。
  3. 官方推荐:做法是通过利用PyStringObject对象的join操作来对存储在list或者tuple中的一组PyStringObject对象进行连接操作,这种做法只需要分配一次内存,执行效率将大大提高。
  4. join执行过程:执行join操作时,会首先统计出在list中一共有多少个PyStringObject对象,并统计这些PyStringObject对象所维护的字符串一共有多长,然后申请内存,将list中所有的PyStringObject对象维护的字符串都拷贝到新开辟的内存空间中。注意:这里只进行了一次内存空间的申请,就完成了N个PyStringObject对象的连接操作。相比于“+”操作符,待连接的PyStringObject对象越多,效率的提升也会越明显。
  • join()的用法:
    str.join(sequence)    其中,str是要连接字符串的 连接符;sequence是要连接的元素序列。
  • 示例演示:
# join操作示例:
>>> str1 = "hello"
>>> str2 = "world"
>>> str3 = "!"
>>> "".join([str1,str2,str3])
'helloworld!'
>>> "#".join([str1,str2,str3])
'hello#world#!'
>>>

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值