Python str join方法:拼接字符串「建议收藏」

Python str join方法:拼接字符串「建议收藏」Python字符串方法join()介绍、使用和注意事项。

大家好,又见面了,我是你们的朋友全栈君。

目录

描述

语法

举例

1. 元素序列是列表

2. 元素序列是元组

3. 元素序列是集合

4. 元素序列是字典

5. 元素序列是字符串

注意事项

1. 要连接的字符串序列(参数)必须是字符串

2. 字符串连接符可省略

3. 当可迭代序列是集合时,拼接结果是无序的

4. 当可迭代序列是字典时,拼接结果是键的拼接

join方法和‘+’性能比较


描述

str.join()方法是Python的字符串方法,用于将序列中的元素以指定的字符串连接成一个新的字符串。

语法

string.join(sequence)
名称 说明 备注
string 字符串连接符 可省略
sequence 要连接的元素序列 不可省略的参数,序列的元素是字符串

举例

1. 元素序列是列表

>>> a = '!@'.join(['Fusion', 'Sphere', 'Cloud'])
>>> a
'Fusion!@Sphere!@Cloud'

2. 元素序列是元组

>>> " ".join(('China', 'Japan', 'USA', 'UK'))
'China Japan USA UK'

3. 元素序列是集合

>>> ''.join({'C', 'h', 'i', 'n', 'a'})
'ahCni'

可以看出,输出的字符顺序与集合中元素的顺序不是保持一致的。

4. 元素序列是字典

>>> ' ~ '.join({'Asia':'China', 'Europe':'UK'})
'Asia ~ Europe'

可以看出,如果序列是字典,拼接的字符是字典的键。

5. 元素序列是字符串

当元素序列仅仅是字符串时,join函数会将字符串中的每一个单个字符抽取出来,与连接符组合。

>>> ', '.join('happy')
'h, a, p, p, y'

注意事项

1. 要连接的字符串序列(参数)必须是字符串

join函数的参数应该是全部由字符串构成的可迭代对象。当可迭代对象不全是由字符串构成的时,Python会报错TypeError。

例如,参数是一个由字符串和整数构成的列表时:

>>> ' * '.join(['1', 2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 1: expected str instance, int found

2. 字符串连接符可省略

字符串连接符可以省略(空字符串)。当字符串连接符为空时,序列中的所有字符串都将连接成一个字符串。

>>> ''.join(['1', '2', '3', '4', '5'])
'12345'

3. 当可迭代序列是集合时,拼接结果是无序的

如果可迭代序列参数是集合,join的返回结果不一定是元素在集合中的顺序,而是打乱的:

>>> ' -- '.join({'a', 'b', 'c'})
'b -- c -- a'

4. 当可迭代序列是字典时,拼接结果是键的拼接

如果可迭代序列参数是字典,join的返回结果是字典中键的拼接结果,而不是键值对的拼接结果。

可以用values函数来拼接值的结果。

>>> test_dict = {'A':'a', 'B':'b', 'C':'c'}
>>> "".join(test_dict)
'ABC'
>>> "".join(test_dict.values())
'abc'

join方法和‘+’性能比较

join()方法和 + 号都可以拼接字符串,但是性能却差异很大。

先来看下面的例子:

下面的例子是将列表str_list中的每个元素分别通过“+”和join方法拼接并重复执行1000次,并比较时间差异。

import time

def spend(func):
    def wapper(*args, **kwargs):
        start = time.time()
        # 为了更好的体验性能差异,重复执行1000遍
        for i in range(1000):
            func(*args, **kwargs)
        end = time.time()
        spend_time = end - start
        print("Spend time: %.6f" % spend_time)
        return
    return wapper

# 通过+号拼接字符串
@ spend
def use_add_opertor(str_list):
    result = ""
    for data in str_list:
        result = result + data

    return


# 通过str.join()方法拼接字符串
@ spend
def use_join_method(str_list):
    result = "".join(str_list)
    return


if __name__ == "__main__":
    # 为了充分体现性能差异,我们把要拼接的字符串列表多写一点
    str_list = ["Python", "OpenStack", "data structure", "arithmetic", "Flask", "MySql",
                "concurrence", "PySpider", "HTML", "CSS", "C", "C++"]
    print("1. Use add operator..")
    use_add_opertor(str_list)

    print("-" * 30)

    print("2. Use str.join() method..")
    use_join_method(str_list)

运行结果如下:

1. Use add operator..
Spend time: 0.001079
------------------------------
2. Use str.join() method..
Spend time: 0.000360

可以看出,在我这台机器上,使用+号拼接字符串比使用str.join()方法拼接字符串消耗时常多了将近2倍。

那么为什么使用join()方法时间会更快一些呢?

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130931.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java常用类之Calendar类[通俗易懂]

    java常用类之Calendar类[通俗易懂]java常用类之Calendar类Calendar类提供了获取或者设置各种日历的字段的方法。构造方法protectedCalendar():由于修饰符是prodected;所以无法直接创建该对象其他方法方法名说明staticCalendargetInstance()使用默认时区或区域获取日历voidset(intyear,intmonth,intdate,inthourofday,intminute,intsecond)设置日历的时分秒

  • idea导入maven项目右侧没有maven_maven多模块和单模块的

    idea导入maven项目右侧没有maven_maven多模块和单模块的今天重装了idea,发现右边的maven,数据库模块不见了,在网上找了一些方法(如:https://blog.csdn.net/zhouyingge1104/article/details/50068919),也没解决,最后自己瞎捣鼓出来了,记录下。1.maven模块不见了,如图:2,找到右下角这个图标,如图:3,鼠标右击,出现很多菜单模块,如图:4.点击Mavenp…

  • 单隐层前馈神经网络网络构造_前馈型神经网络常用于

    单隐层前馈神经网络网络构造_前馈型神经网络常用于这篇博客主要介绍神经网络基础,单隐层前馈神经网络与反向传播算法。神经网络故名思议是由人的神经系统启发而得来的一种模型。神经网络可以用来做分类和回归等任务,其具有很好的非线性拟合能力。接下来我们就来详细介绍一下但隐层前馈神经网络。首先我们来看一下神经元的数学模型,如下图所示:可以看到为输入信号,而神经元最终输出为,由此我们可以看到,单个神经元是多输入单输出的。但是从上图我们可以看到,…

    2022年10月30日
  • 77. Combinations「建议收藏」

    77. Combinations「建议收藏」Giventwointegers n and k,returnallpossiblecombinationsof k numbersoutof1… n.Forexample,If n =4and k =2,asolutionis:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]

  • lombok 插件_lombok插件作用

    lombok 插件_lombok插件作用在开发中,使用lombok插件能给程序开发带来极大的便利,省去Getter、Setter等无技术含量的重复代码,让我们更专注于代码的逻辑设计。lombok插件安装往往会有一些问题,IDE直接下载安装往往是失败的。这里,我给大家写一篇lombok安装的教程:1.首先查看IDEA的版本2.去官网下载对应版本的lombok插件,地址:http://plugins.jetbrains….

  • flash cookie的制作和使用例子详解 一

    flash cookie的制作和使用例子详解 一flashcookie是什么,有什么作用,这些不做介绍,可以在网上搜,这里主要是做一个制作和使用flashcookie的例子要使用flashcookie首先要制作一个swf的flash文件,然后在页面才能调用。flash的制作,这里我们就用adobeflashcs5,这个工具网上一搜就可以找到下载地址打开后界面如下图所示,[img]http://dl2.iteye…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号