Python字符串拼接与列表join性能对比及自定义字符串实现问题
Python字符串拼接与列表join的机制差异及性能对比
运行机制差异
- Python字符串属于不可变对象,任何修改字符串的操作都会生成全新的字符串对象,伴随额外的内存申请、数据拷贝和旧对象回收开销。
你第一种写法里虽然start和end是通过join生成的,但最终start+mid+end的拼接步骤会依次生成start+mid的临时字符串,再和end拼接得到最终结果,会产生2次不必要的临时字符串对象。 - 列表是可变对象,列表拼接仅修改列表的元素引用,不会生成中间字符串对象;最终调用
str.join()时,方法会先统计所有元素的总长度,一次性申请对应大小的内存,再把所有字符拷贝进去,全程只有一次字符串生成操作。
性能对比
- 当n值很小时(比如你场景里n=6),两种写法的性能差异可以完全忽略,都能满足需求。
- 当n值较大(比如过万、十万级)时,第二种列表join的写法性能明显优于第一种,随着n增大,差距会进一步拉大。
更简洁高效的实现
你可以直接初始化全点列表后修改指定位置,省去列表拼接的开销,是比你提供的两种方案性能更高的写法:
def buildstring(n, i, char): res = ['.'] * n res[i] = char return ''.join(res)
如果偏好字符串切片写法也可以用下面的版本,可读性更高,小n场景下性能也足够:
def buildstring(n, i, char): return '.' * i + char + '.' * (n - i - 1)
内容的提问来源于stack exchange,提问作者NotQuiteSo1337
相关产品推荐
相关产品推荐

