Python 字符串拼接 ‘+=‘ 和 ‘join()‘ 谁的速度更快?

2023-11-18

一、 字符串拼接的两种方法

程序当中经常出现需要不断接收新字符串并将这些字符串组成新字符串输出的情况。
该方法一般有两种解决方案,

  1. 创建一个空字符串(test_str),将每次新传入的 new_str 使用 ‘test_str += new_str’ 的方式添加到原有字符串中,返回test_str
  2. 创建一个空列表(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)

三、 结论

在这里插入图片描述
注:具体测试结果会因硬件性能差别而有较大差异,趋势不会变。

  1. 字符串长度在百万以下:两种方式区别不大,join() 方法会快 25% 左右
  2. 字符串长度在百万以上:+=的方法所消耗的时间会指数级的增加,(百万以下也指数级增加,只是不明显),join() 方法会有明显优势。
  3. 当代码当中的 name 长度越长,+= 方法的弊端就越明显。

在这里插入图片描述

四、 分析

Python中字符串是不可变对象,修改字符串就得将原字符串中的值复制,开辟一块新的内存,加上修改的内容后写入到新内存中,以达到“修改”字符串的效果。在使用“+”拼接字符串时,正是使用了重复性的复制、申请新内存、写入值到新内存的工作一遍遍的将字符串的值修改。
而使用join()方法拼接字符串时,会先计算总共需要申请多少内存,然后一次性申请所需内存并将字符串复制过去。这样便省去了重复性的内存申请和写入,节省了时间消耗。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 字符串拼接 ‘+=‘ 和 ‘join()‘ 谁的速度更快? 的相关文章

随机推荐

  • 数据库多维迭代算法

    关键词 数据库 迭代 递归 多维 一 两种传统的数据库迭代结构算法 对于数据库的迭代结构 有两种传统的算法 递归算法和边界算法 比如对于下面图1的结构 图1 递归算法的数据结构如表1所示 节点id 节点值 父节点id 1 1111 2 3
  • USDP使用笔记(八)Flink配置及简单测试

    Flink配置Flink配置及简单测试 上一篇 https lizhiyong blog csdn net article details 123560865 将USDP2 0自带的Flink更换为Flink1 14后 还没有来得及改配置
  • pycharm如何配置Anaconda虚拟环境

    文章目录 一 Anaconda虚拟环境创建 二 pycharm添加虚拟环境 一 Anaconda虚拟环境创建 1 此电脑 右键 属性 高级系统设置 高级 环境变量 系统变量 path 新建 相应路径 Anaconda 相应路径 Anacon
  • 小程序和Vue写法的区别

    小程序和Vue写法的区别主要有以下几点 语法不同 小程序使用的是WXML WXSS和JS 而Vue使用的是HTML CSS和JSX 数据绑定方式不同 小程序使用的是双向数据绑定 而Vue使用的是单向数据流 1 在小程序中需要使用e curr
  • oracle数据库imp/sqlplus命令无效引发的问题

    好久没有使用Oracle数据库 在导入数据库dmp文件时出现imp命令无效 oracle导入dmp文件命令 imp user password ip 端口 server name file 文件路径 dmp full y 如 imp crm
  • HTML 常用快捷键,HTML介绍

    一 1 修改主题 2 3 修改 4 长代码换行 file setting general wrap 对勾选中 5 新建项目 file new project 6 关联浏览器 file setting tool web borther 复制路
  • bigdata_git版本控制系统

    一丶版本控制系统发展 集中式VCS 分布式VCS git 二丶git工作流程图 三丶分支管理 每个项目确立后可以添加多个分支 分支可以更新版本 只要分支没有合并提交 对其他人没有任何影响 这也是跟svn的不同 四丶内部数据存储方式 git统
  • 惠斯通电桥与运算放大器的输入失调电流和输入偏置电流

    在做数字开关气压表项目中 使用的气压传感器的结构是惠斯通电桥 输出差分信号 差分电压与气压大小成线性关系 运放的失调电压对精度影响很大 在这里考虑选择使用低漂移运放 在选择运放时考虑了输入电阻 失调电压的影响 如果运放的输入电阻大小与电桥电
  • 大模型训练避坑指南

    原文 https baijiahao baidu com s id 1760862056681517207 wfr spider for pc 自 2022 年 11 月底 ChatGPT 发布以来 大模型的热度持续发酵 相信高屋建瓴的讨论
  • 辛普森悖论_所谓的辛普森悖论

    辛普森悖论 We all know the Simpsons family from Disneyland but have you heard about the Simpson s Paradox from statistic theo
  • cdn缓存服务器有网站图片,CDN缓存服务器图片存储一致性hash算法的理解

    用hash做缓存 假如有三台服务器 1 2 3 有三万张图片 我想将图片平均缓存到我三台服务器上 一个服务器大概一万张 怎么去实现这个办法呢 可以用hash来取余数进行操作 加入我们是以图片的名字作为key进行hash计算 hash 图片名
  • C - 滑动窗口 /【模板】单调队列

    Description 有一个长为 n 的序列 a 以及一个大小为 k 的窗口 现在这个从左边开始向右滑动 每次滑动一个单位 求出每次滑动后窗口中的最大值和最小值 例如 The array is 1 3 1 3 5 3 6 7 and k
  • .whl is not a supported wheel on this platform的原因及其解决办法

    在PIP安装 whl文件的时候碰到这个错误 具体如下 我的python版本是3 4 4 这个错误的原因如下 可能的原因1 安装的不是对应python版本的库 下载的库名中cp27代表python2 7 其它同理 可能的原因2 下载的是对应版
  • IDEA写SQL语句时不会提示表名、列名的处理方法(实测有效)

    打出表名没有提示 下面进行设置 按照别人的设置没效果 打开设置 还是刚才的路径 要同时设置两个地方才有效
  • 《Netty实战》读书笔记

    第一章 Netty 异步和事件驱动 Netty包含网络编程 多线程处理和并发 NIO NIO 代表非阻塞 I O Non blocking I O Netty 的核心组件 Netty 的主要构件 Channel 回调 Future 事件和
  • SSM商城项目实战总结

    SSM商城项目实战总结 编程思想是指在软件开发过程中 程序员所遵循的一种思维模式或方法论 它是指导程序员如何组织和解决问题的一种思考方式 下面是对常见的编程思想进行的总结 面向对象编程 OOP 面向对象编程是一种将数据和操作数据的方法组合在
  • ADS使用J-LINK调试之配置方法

    ADS使用J LINK调试之配置方法 1 安装好ADS1 2及J LINK驱动文件 2 ADS配置 随便打开项目 进入AXD调试界面 在AXD中 选择 3 进入以下界面 选择 Add 进入J LINK安装目录下 添加 JLinkRDI dl
  • ubuntu终止terminal中下载任务以及继续下载

    ctrl c是终止正在下载的任务 wget c URL是继续刚才终止的那个任务
  • 22 年国内最牛的 Java 面试八股文合集(全彩版),不接受反驳

    很多小伙伴从四月份就开始准备面试了 截止现在已经过去 2 个多月的时间 显然这段时间的准备没有白费 很多小伙伴都报喜 成功拿到了 XX 公司的 Offer 下面我把这段时间给小伙伴本准备的 Java 面试八股文合集 全彩版 拿出来 来帮助没
  • Python 字符串拼接 ‘+=‘ 和 ‘join()‘ 谁的速度更快?

    一 字符串拼接的两种方法 程序当中经常出现需要不断接收新字符串并将这些字符串组成新字符串输出的情况 该方法一般有两种解决方案 创建一个空字符串 test str 将每次新传入的 new str 使用 test str new str 的方式