[转]python 中的字符串连接
python 中可使用 + 进行字符串的连接操作
但很多文档里都说,python 使用 + 进行字符串连接的效率低下
这直接导致本人在代码中不敢使用 + 进行字符串的连接操作
可事实又是怎样呢?
之所以说python 中使用 + 进行字符串连接的操作效率低下,是因为python中字符串是不可变的类型,使用 + 连接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当连续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了
对于这种连加操作可以用列表实现:Str = ''.jon(a,b,c,d,e,f,...) 以提高效率,这样只会有一次内存的申请
其实在实际应用中需要使用字符串连续相加是很少的,更多的操作是几个字符串的连接,当有这样的需求时,使用 + 操作符其实是最快的方式
本人同样也尝试过使用 tList.append(i),最后再 ''.join(tList),但经实际代码对比,还是 + 操作效率更高
下面给出测试代码:
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import os,sys
- import time
- MAX = 9000000
- char_list = [ chr((i % 26) +97) for i in xrange(MAX) ]
- my_str=''
- last_time = time.time()
- for i in char_list:
- my_str = my_str + i
- print time.time() - last_time
- print '-' * 80
- my_str=''
- t_list=[]
- last_time = time.time()
- for i in char_list:
- t_list.append(i)
- my_str = ''.join(t_list)
- print time.time() - last_time
- print '-' * 80
运行结果:
2.13897681236 -------------------------------------------------------------------------------- 2.35726714134 --------------------------------------------------------------------------------
下面是一个连加操作时 字符串+ 与列表 join的效率对比(代码来自:http://www.douban.com/group/topic/12795262/ 的一则回贴):
- from time import time
- def lz():
- t = time()
- for i in xrange(10000):
- s = '兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'
- +'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰
- 州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+
- '兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰>
- 州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'+'兰州'
- print time() - t
- def v5():
- t = time()
- for i in xrange(10000):
- s = ''.join(['威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威>
- 武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武',
- '威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威>
- 武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武',
- '威武','威武','威武','威武','威武','威武','威武','威武','威武'])
- print time() -t
- lz() is v5()
运行结果:
0.111644983292 0.0529618263245