python中字符串的拼接+和join()谁的效率更⾼
⼀、字符串拼接的两种⽅法
程序当中经常出现需要不断接收新字符串并将这些字符串组成新字符串输出的情况。
该⽅法⼀般有两种解决⽅案,
创建⼀个空字符串(test_str),将每次新传⼊的 new_str 使⽤ ‘test_str += new_str’ 的⽅式添加到原有字符串中,返回test_str
创建⼀个空列表(test_list),将每次新传⼊的 new_str 使⽤ append(new_str) 的⽅式添加到列表当中,返回=="".join(test_list)==
⼆、效率之间的⽐较
import time
# 装饰器,计算程序运⾏时间
def start_time(func):
def wrapper(*args, **kwargs):
start = time.time()
res = func(*args, **kwargs)
print(func.__name__, time.time() - start)
return res
return wrapper
# 使⽤ append 和 join 实现连续字符串拼接
@start_time
def test_1(frequency, string):
s = []
for i in range(frequency):
s.append(string)
return''.join(s)
# 使⽤ += 实现连续字符串拼接
@start_time
def test_2(frequency, string):
s = ''
for i in range(frequency):
s += string
return s
name = 'P'
for i in range(25):
print('\n数据量为2的{}次⽅'.format(i))
f = 2 ** i
test_1(f, name)
test_2(f, name)
三、结论
注:具体测试结果会因硬件性能差别⽽有较⼤差异,趋势不会变。
字符串长度在百万以下:两种⽅式区别不⼤,join() ⽅法会快 25% 左右
字符串长度在百万以上:+=的⽅法所消耗的时间会指数级的增加,(百万以下也指数级增加,只是不明显),join() ⽅法会有明显优势。当代码当中的 name 长度越长,+= ⽅法的弊端就越明显。
字符串长度比较四、分析
Python中字符串是不可变对象,修改字符串就得将原字符串中的值复制,开辟⼀块新的内存,加上修改的内容后写⼊到新内存中,以达
到“修改”字符串的效果。在使⽤“+”拼接字符串时,正是使⽤了重复性的复制、申请新内存、写⼊值到新内存的⼯作⼀遍遍的将字符串的值修改。
⽽使⽤join()⽅法拼接字符串时,会先计算总共需要申请多少内存,然后⼀次性申请所需内存并将字符串复制过去。这样便省去了重复性的内存申请和写⼊,节省了时间消耗。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论