python 中的字符串连接

2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

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

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

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


可事实又是怎样呢?

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

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

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

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

推荐:为什么Python 可以使用 + 把两个字符串连接成一个字符串

[今天学习Python,看到这样一个例子,想问一下原因: {代码...} 结果是: {代码...} 我想问一下为什么通过使用 + 可以把两个字符串连成一个长字符串,用的是什么方法?]


下面给出测试代码:

#!/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

推荐:《python本质参考 第4版》笔记 §11 测试、调试、评测和调优 §11.1 文档字符串

[§11 测试、调试、评测和调优§11.1 文档字符串#!/usr/bin/env python# -*- coding: gbk -*-import sys #设定字符编码为]

相关推荐