python 中可使用 + 进行字符串的连接操作

但很多文档里都说,python 使用 + 进行字符串连接的效率低下

这直接导致本人在代码中不敢使用 + 进行字符串的连接操作

可事实又是怎样呢?

之所以说python 中使用 + 进行字符串连接的操作效率低下,是因为python中字符串是不可变的类型,使用 + 连接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当连续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了

对于这种连加操作可以用列表实现:Str = ''.jon(a,b,c,d,e,f,...) 以提高效率,这样只会有一次内存的申请

其实在实际应用中需要使用字符串连续相加是很少的,更多的操作是几个字符串的连接,当有这样的需求时,使用 + 操作符其实是最快的方式

本人同样也尝试过使用 tList.append(i),最后再 ''.join(tList),但经实际代码对比,还是 + 操作效率更高

下面给出测试代码:

[python] view plaincopy
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import os,sys
  4. import time
  5. MAX = 9000000
  6. char_list = [ chr((i % 26) +97)  for i in xrange(MAX) ]
  7. my_str=''
  8. last_time = time.time()
  9. for i in char_list:
  10. my_str = my_str + i
  11. print time.time() - last_time
  12. print '-' * 80
  13. my_str=''
  14. t_list=[]
  15. last_time =  time.time()
  16. for i in char_list:
  17. t_list.append(i)
  18. my_str = ''.join(t_list)
  19. print time.time() - last_time
  20. print '-' * 80

运行结果:

2.13897681236 -------------------------------------------------------------------------------- 2.35726714134 --------------------------------------------------------------------------------

下面是一个连加操作时  字符串+ 与列表 join的效率对比(代码来自:http://www.douban.com/group/topic/12795262/  的一则回贴):

[python] view plaincopy
  1. from time import time
  2. def lz():
  3. t = time()
  4. for i in xrange(10000):
  5. s = '兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'
  6. +'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰
  7. 州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+
  8. '兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰>
  9. 州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'
  10. print time() - t
  11. def v5():
  12. t = time()
  13. for i in xrange(10000):
  14. s = ''.join(['威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威>
  15. 武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武',
  16. '威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威>
  17. 武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武',
  18. '威武','威武','威武','威武','威武','威武','威武','威武','威武'])
  19. print time() -t
  20. lz() is v5()

运行结果:

0.111644983292 0.0529618263245

转载于:https://www.cnblogs.com/study-development/p/3633743.html

[转]python 中的字符串连接相关推荐

  1. Python 中,字符串连接效率最高的方式是?一定出乎你的意料

    网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作.说前者效率更高,它以更少的代价创建新字符串,如果用「+」连接多个字符串,每连接一次,就要为字符串分配一次内存,效率显得有点低 ...

  2. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

  3. Python 中的字符串,是门大学问。

    公众号后台回复"图书",了解更多号主新书内容 作者:Rocky0429 来源:Python空间 上一篇文章中讲了 Python 数据类型中的数字类型,这篇文章轮到数据类型中另一重磅 ...

  4. python中的字符串是什么数据类型_Python数据类型之字符串

    一:概述 Python中的字符串的一些概念 可以看作是字符的集合,在数据类型里没有单个字符的数据类型,可以用单个字符表示的一个字符串数据类型 字符串是一种不可变的序列类型,单个字符从左到右按照顺序排列 ...

  5. 超详细的Python中的字符串常识【赶紧收藏】

    今天我们说说字符串类型,涉及很多基础知识,不过字符串还是需要在多讲讲的. 回顾一下:字符串与长字符串 Python非常简单,并没有专门分出一个char(Character)类型(搞过C/Java的同学 ...

  6. 如何在Python中获取字符串的子字符串?

    有没有一种方法可以在Python中为字符串加上字符串,以从第三个字符到字符串的末尾获取新的字符串? 也许像myString[2:end] ? 如果离开第二部分意味着"直到最后",而 ...

  7. python写错了怎么更改-Python中修改字符串的四种方法

    在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用joi ...

  8. python中定义字符串_python中的字符串

    python中的字符串一旦定义,则不可以修改 python中的原始字符串 即 在字符串前面加小写字母r 比如:打印输出C:\Program Files\Microsoft Games python中的 ...

  9. python字符计数怎样去除空格_去除python中的字符串空格的简单方法

    python编程中,我们在修改代码,遇到空格很多的情况下,我们要删除空格.本文小编整理了三种字符串去除空格的方法: 方法一:使用字符串函数replace,去除全部空格. 实例: >>> ...

最新文章

  1. 面试热点Redis分布式锁,再细说一次
  2. 谈谈 Java 中自定义注解及使用场景
  3. Confluence 6 那些文件需要备份
  4. TCL中关于Pins的一些使用方法?
  5. docker 容器重命名
  6. QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开
  7. 详解停车位检测算法 Vision-Based Parking-Slot Detection: A DCNN-Based Approach and a Large-Scale Benchmark
  8. 《我也能做CTO之程序员职业规划》推荐序
  9. mysql int 转 varchar_Java后端程序员必备:MySQL索引失效的十大杂症
  10. 支持向量机原理(四)SMO算法原理
  11. I.MongoDB Features and Installation(Mongodb安装和介绍)
  12. JavaSE、JavaEE、JavaME三者的关系与区别
  13. git源码安装后报错:bash: /usr/bin/git: No such file or directory
  14. 大学学python用记笔记吗_Python 应该怎么学?
  15. stm32 bootloader启动正常,APP程序会在时钟配置出错原因分析
  16. 扒一扒“WEBP格式”的图片
  17. FreeRTOS学习笔记——FreeRTOS 时间管理
  18. Apache网页优化(网页压缩、网页缓存、隐藏版本、配置防盗链)
  19. 2022 开源之夏 | Serverless Devs 陪你“变得更强”
  20. docker部署环境

热门文章

  1. 分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”
  2. 自己简单封装的自己项目需要的http请求
  3. PHP_Smarty
  4. Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...
  5. Tomcat - Maven plugin: 运行找不到webapp
  6. 基于环信sdk的陌生人交友php服务器代码开源
  7. xhost和XServer相关概念汇总
  8. XMPP文件传输(XEP-0096协议说明)
  9. 《大话存储__网络存储系原理精解与最佳实践》电子书下载
  10. 验证软件需求正确性的四个角度