python 中的字符串连接

上一篇 / 下一篇  2017-09-15 17:59:41 / 个人分类:python

http://blog.csdn.net/jxfgh/article/details/6969184/

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 plain copy
  1. #!/usr/bin/env python  
  2. # -*- coding:utf-8 -*-  
  3.   
  4. import os,sys  
  5. import time  
  6.   
  7. MAX = 9000000  
  8. char_list = [ chr((i % 26) +97)  for i in xrange(MAX) ]  
  9.   
  10. my_str=''  
  11. last_time = time.time()  
  12. for i in char_list:  
  13.     my_str = my_str + i  
  14. print time.time() - last_time  
  15. print '-' * 80  
  16.   
  17.   
  18. my_str=''  
  19. t_list=[]  
  20. last_time =  time.time()  
  21. for i in char_list:  
  22.     t_list.append(i)  
  23. my_str = ''.join(t_list)  
  24. print time.time() - last_time  
  25. print '-' * 80  
运行结果:

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


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

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

TAG:

 

评分:0

我来说两句

日历

« 2024-04-24  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 45402
  • 日志数: 54
  • 建立时间: 2017-04-28
  • 更新时间: 2018-01-25

RSS订阅

Open Toolbar