如何将多个小字符串拼接成一个大字符串

xiaoxiao2021-02-28  106

实际案例

在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数:   hwDetect: “<0112>”   gxDepthBits “<32>”   gxResolution: “<1024x768>”   gxRefresh: ”<60>”   fullAlpha: “<1>”   lodDist: “<100.0>”   DistCull: “<500.0>” 在程序中我们将各个参数按次序收集到列表中: [“<0112>”, “<32>”, “<1024x768>”, “<60>”, “<1>”, “<100.0>”, “<500.0>”] 最终我们要把各个参数拼接成一个数据报进行发送: “<0112><32><1024x768><60><1><100.0><500.0>>”

解决方案: - 方法一:迭代列表,连续使用‘+’操作依次拼接每一个字符串 - 方法二:使用str.join(),更加快速的拼接列表中所有字符串

方法一

迭代列表,连续使用‘+’操作依次拼接每一个字符串,其代码如下:

# -*- coding: utf-8 -*- pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"] s = "" for p in pl: s += p print s

其输出结果为:

<0112><32><1024x768><60><1><100.0><500.0>

其实我们采用”+”进行字符串拼接,实际上是运算符重载,在字符串拼接时调用了str.__add__()。若有兴趣可查阅Python官方文档。

方法二

使用str.join(),更加快速的拼接列表中所有字符串,其代码如下:

# -*- coding: utf-8 -*- pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"] s = "".join(pl) print s

其输出结果如下:

<0112><32><1024x768><60><1><100.0><500.0>

对于方法一,若我们将方法一的中间结果打印输出,我们就会发现方法一存在很严重的问题,每一次字符串拼接操作Python的解释器都要进行内存的申请与回收,一旦所需拼接的字符串过多,其运行效率会大打折扣。

因此,我们对于处理大量字符串拼接操作推荐使用str.join()。为此,在这里再介绍一个关于str.join()的小技巧,其代码如下:

l = ["abc", 123, 'xyz'] # 通过生成器解析将每个元素转为str类型 s = "".join(str(x) for x in l) print s

其运行结果如下:

abc123xyz

当我们处理的列表中既有字符串,又有非字符串的数据时,我们可以使用生成器表达式或列表解析将列表中的每个元素转为str类型。(注:具体关于列表解析与生成器表达式的效率问题,可参考杰瑞的专栏。)

转载请注明原文地址: https://www.6miu.com/read-25252.html

最新回复(0)