zoukankan      html  css  js  c++  java
  • [转]python 中的字符串连接

    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.   
    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 plaincopy
    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. ','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武',  
    17. '威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威>  
    18. ','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武',  
    19. '威武','威武','威武','威武','威武','威武','威武','威武','威武'])  
    20.     print time() -t  
    21. lz() is v5()  

    运行结果:

     

    0.111644983292 0.0529618263245

  • 相关阅读:
    MySql存储过程—2、第一个MySql存储过程的建立
    MYSQL 存储过程1、SQL存储过程的基础知识
    [转]忍无可忍 献上一曲维族歌曲 《我们的客户是花园》(吐槽)
    由硬盘供电不稳、数据线品质差造成的蓝屏
    music Elton John
    一个人在艰苦中能雄起,那是能力和毅力,一个人在安逸中能雄起,那是自觉和自律。
    安装VS2012出问题后,反复重启电脑。
    山寨、低端、劣质的机箱前置面板的悲剧。
    SQL Server Management Studio (SSMS) 清除登录记录
    DataTable 分批处理,每批处理4行
  • 原文地址:https://www.cnblogs.com/study-development/p/3633743.html
Copyright © 2011-2022 走看看