【Python Cookbook】S02E12 字符串的连接及合并 ‘ ‘.join()

目录

  • 问题
  • 解决方案
  • 讨论

问题

如果我们想要将很多小的字符串合并成为一个大的字符串,怎么办?

解决方案

如果只是想连接一些字符串,一般使用 + 操作符即可。

a = "is Chicago"
b = "not Chicago"
print(a + " " + b)

结果:

is Chicago not Chicago

针对稍微复杂一点的,+ 可以被 format() 代替

print("{} {}".format(a, b))

而如果想要合并的字符串在一个序列或者可迭代对象中,那么更为快速的合并方法,请选择 join() 方法。

parts = ["is", "Chicago", "not", "Chicago?"]
print(''.join(parts))
print(' '.join(parts))

对比下述结果,可得知为什么 join() 函数前为存空格:

isChicagonotChicago?
is Chicago not Chicago?

讨论

除了上述的三种场景,还有一种场景可能读者会经常遇到,即如果只是打算在源代码中将字符串字面值合并在一起,那么可以直接简单地将它们排列在一起即可。

a = "Hello" "World"
print(a)

其实本节虽然介绍了很多种方法,但是重点在于这些不同大的方法的选择。最重要的一点,是读者要意识到使用 + 操作符做大量的字符串连接是非常低效的,主要原因内存的拷贝以及垃圾的收集产生的影响。

s = ""
for p in parts:s += p

这种做法会比 .join() 方法慢上许多。具体原因,就是每一个 += 操作符都需要创建一个新的字符串对象。对于需要连接的操作,建议读者最好先收集好所有要连接的部分,然后再选择高效的方法进行连接。

除了 .join() 方法外,还有一个不错的技巧,即 生成器表达式

data = ["ACME", 50, 91.1]
print(','.join(str(d) for d in data))

此外,当字符串同输入输出 I/O 操作混合起来使用的时候,需要对应用做仔细的分析。如下两段代码中,最终实现的结果相同,但是需要根据字符串的大小因素以及 I/O 系统调用的开销进行选择。

# Version 1
f.write(chunk1 + chunk2)
# Version 2
f.write(chunk1)
f.write(chunk2)

仔细分析来看,有两种情况:

  • 如果两个字符串都很小,那么第一个版本的代码能带来更好的性能,因为执行一次 I/O 系统调用的固有开销很高。
  • 如果两个字符串都很大,那么第二个版本的代码会更加高效,因为第二个版本避免了创建大的临时结果,也没有对大块的内存进行拷贝。

所以综上,在选择方法时,要首先想清楚 I/O 系统开销与 临时结果内存开销 的综合抉择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[创业之路-117] :制造业企业的必备管理神器-ERP-是什么?企业经营管理与EPR的主要功能模块与全流程

目录 一、什么是EPR 1.1 跨企业的供应链思想 1.2 EPR的概念:企业资源管理计划 1.2.1 助力企业管理各种资源:人、财、物(机、料、法、环) 1.2.2 助力企业有效管理 1.2.3 效率的提升 1.4 应用领域 二、ERP的功能模块 三、E…

【docker】docker启动neo4j,并配置内存

注意下:--volume宿主机目录:/data 和 --publish宿主机port:7474 --publish宿主机port:7687 docker run -d \ --publish9801:7474 --publish9802:7687 \ --env NEO4J_AUTHneo4j/passwd \ --volume/opt/docker/data/vol-data/neo4j4.2:/data \ --restart always \ --…

AI金融投资:批量下载巨潮资讯基金招募说明书

打开巨潮资讯的基金招募说明书页面: http://www.cninfo.com.cn/new/fulltextSearch/full?searchkey%E5%B0%81%E9%97%AD%E5%BC%8F%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E8%AF%81%E5%88%B8%E6%8A%95%E8%B5%84%E5%9F%BA%E9%87%91%E6%8B%9B%E5%8B%9F%E8%AF%B4%E6%98%…

Web前端网页设计模板:创新设计与高效开发的完美融合

Web前端网页设计模板:创新设计与高效开发的完美融合 在当今数字化时代,Web前端网页设计模板已经成为构建美观且功能强大的网页应用的重要工具。它不仅能够简化开发过程,提升工作效率,还能够确保网页在各种设备上都能够呈现出令人…

Web前端能进什么国企:探索前端技能在国有企业的应用前景

Web前端能进什么国企:探索前端技能在国有企业的应用前景 在数字化浪潮席卷全球的今天,Web前端技术已经渗透到各个行业和领域。对于许多寻求稳定职业发展的前端开发者而言,国有企业(国企)成为了一个颇具吸引力的选择。…

Flink 窗口触发器

参考: NoteWarehouse/05_BigData/09_Flink(1).md at main FGL12321/NoteWarehouse GitHub Flink系列 9. 介绍 Flink 窗口触发器、移除器和延迟数据等 | hnbian https://github.com/kinoxyz1/bigdata-learning-notes/blob/master/note/flink/Window%26%E6%97%B6…

apple watch真机开发第一步连接xcode详细教程,开启watch开发者模式真的很坑啊啊啊啊啊

如何连接真机 1.首先先确保你的 Apple Watch 跟 你的 iPhone 已经配对完成 2.用数据线连接你的 iPhone 到电脑,等待一会,然后打开xcode,找到这个iphone,如果有警告提示,就需要打开开发者模式: Previous pr…

vscode + CMake编译(opencv显示图片工程)

1.opencv 2.Cmake 2.1 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件;Cmake 并不直接建构出最终的软件,而是产生标准的建…

PostgreSQL源码分析——数据页校验

我们知道数据库是持久化存储到外存(磁盘)的,而存储介质可能损坏,数据通过IO传输时也有可能传输错误,虽然概率非常低,那么,数据库怎么应对这种情况呢?能否拥有一定的校验能力&#xf…

【数据结构与算法】稀疏矩阵(三元组,十字链表存储)详解

给出稀疏矩阵的节省内存的存贮结构并写出相应的输入、输出算法。 稀疏矩阵是一个大部分元素为0的矩阵。为了节省内存&#xff0c;我们可以只存储非零元素。一种常见的存储结构是三元组&#xff0c;每个三元组包含一个非零元素的行索引、列索引和值。 #include <stdio.h>…

STemWin在Windows上仿真运行环境配置

文章目录 一、STemWin介绍二、emWin必用的2个工具2.1 PC仿真器2.2 GUIBuilder图形化设计工具三、安装VS2022四、打开emwin仿真工程五、常见的配置修改5.1 运行内存修改5.2 LCD显示屏尺寸的修改一、STemWin介绍 emWin(Embedded Wizard Graphics Library)是Segger公司开发的嵌…

UE4_材质_湿度着色器及Desaturation算法_ben材质教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿美好生活越来越好。 效果图&#xff1a; 原图&#xff1a; 1、使用初学者内容包的材质 我们这里使用虚幻自带的材质M_Brick_Clay_Old,复制一个更名为M_Brickclayoldwet材质。 2、添加去饱和度Desaturation节…

基于二进制构建Kubernetes 1.28 高可用集群

基于二进制构建Kubernetes高可用集群 作者:行癫(盗版必究) 一:环境介绍 1.主机规划 IP地址主机名主机配置主机角色软件列表10.9.12.60xingdiancloud-native-master-a2C4Gmasterkube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubectl、haproxy、keepali…

【代码随想录】【算法训练营】【第43天】 [518]零钱兑换II [377]组合总和IV [卡码57]爬楼梯

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 部分题目来自卡码网。 day 43&#xff0c;极其困难的周三~ 题目详情 [518] 零钱兑换II 题目描述 518 零钱兑换II 解题思路 前提&#xff1a;假设每一种面额的硬币有无限个&#xff0c;求组合数…

Linux中执行jps产生 -- process information unavailable

在使用 jps 命令时,如果遇到 “process information unavailable” 错误,通常是由于以下几个原因之一: JAVA_HOME 没有正确设置: jps 命令依赖于正确设置的 JAVA_HOME 环境变量来找到 Java 安装路径。如果这个环境变量没有正确设置或指向的路径不正确,可能会导致 jps 无法…

Java23种设计模式(一)

前言 这2个月来&#xff0c;重新出发&#xff0c;从java开发需要的数据库、查询日志工具、开发工具等的安装、环境配置&#xff0c;再到后面的基础学习、数据库学习、扩展学习&#xff08;maven、mq、设计模式、spring 系列等等&#xff09;&#xff0c;边学边记录&#xff0c…

QT串口调试助手V2.0(源码全开源)--上位机+多通道波形显示+数据保存(优化波形显示控件)

首先关于Qt的安装和基本配置这里就不做重复说明了&#xff0c;注&#xff1a;本文在Qt5.14基础上完成 完整的项目开源仓库链接在文章末尾 图形控件——qcustomplot QCustomPlot是一个基于Qt框架的开源绘图库&#xff0c;用于创建高质量的二维图表和数据可视化。 QCustomPlot…

【王树森】深度强化学习(DRL)学习笔记

目录 第一部分&#xff1a;基础知识1.机器学习基础2.蒙特卡洛估计3.强化学习基础知识3.1 马尔科夫决策过程马尔可夫决策过程&#xff08;Markov decision process&#xff0c;MDP&#xff09;智能体环境状态状态空间动作动作空间奖励状态转移状态转移概率 3.2 策略策略定义 3.3…

基于Go开发的开源远程桌面分享工具ScreeGo编译使用

1. 克隆源码 : git clone --recursive https://github.com/screego/server.git 2. 使用GoLand打开工程 3.进入Server目录运行go mod downalod 下载依赖 4.创建配置文件screego.config.development.local内容如下&#xff1a; SCREEGO_EXTERNAL_IP你的公网IP 5. 编译并运行服务…

工业互联网的独特UI风格

工业互联网的独特UI风格