ITPub博客

首页 > 数据库 > 数据库开发技术 > Python小技巧:连接字符串不要再使用+号了,用这个方法更快

Python小技巧:连接字符串不要再使用+号了,用这个方法更快

原创 数据库开发技术 作者:jackzhang 时间:2024-03-23 07:00:00 0 删除 编辑

当我们刚开始入门Python时,使用加号运算符+来连接字符串是非常直观和容易的,就像许多编程语言一样,比如Java。

然而,后来我发现许多开发人员似乎更喜欢使用.join()方法而不是+。本文,我将介绍这两种方法之间的区别,以及不应该使用+的原因。

从最简单的双字符串连接开始

作为初学者,或者刚从使用+来连接字符串的其他语言切换过来的人,编写这样的代码非常容易:

str1 = 'Hello '
str2 = 'Python!'
print(str1 + str2)

随着你越来越多地使用Python,你可能会意识到其他人更喜欢像下面这样使用join()方法:

str1 = 'Hello '
str2 = 'Python!'
print(''.join([str1, str2]))

多字符串连接

然而,有一次我需要连接一个列表中的多个字符串。比如:

str_lst = ['The', 'world', 'is', 'beautiful,', 'I', 'want', 'to', 'go', 'and', 'see']

起初,多数初学者最开始想到的通常是通过循环来完成连接:

def join_strings(strs):
    result = ''
    for str in strs:
        result += ' ' + str
    return result[1:]
join_strings(strs=str_lst)

在这个例子中,我必须编写一个for循环来逐个地连接字符串。另外,结果字符串需要裁剪掉我在开头添加的空格符,因为所有字符串都需要在前面添加空格,不止第一个。您可能有其他解决方案,例如向for循环添加索引,那样的话index = 0处的字符串就不用添加空格。无论如何,您仍然需要这个for循环并用空格来达到某些目的。

在此之后,我想起我以前见过的.join()方法,也许这就是我需要使用它的时候!

def join_strings_v2(strs):
    return ' '.join(strs)
join_strings_v2(str_lst)

看起来很简单对吧!一行代码就可以搞定一切。由于.join()方法是由字符串对象调用的,因此将使用字符串对象来连接列表中的每个字符串,因此无需担心开始处的空格。

但是等等,您真的认为这是我们需要使用join()方法而不是+的唯一原因吗?No,请继续往下看。

join()方法背后的逻辑

现在,让我们比较一下这两种方法的性能。我们可以使用Jupyter Notebook的魔术方法%timeit来计算耗时。

上面显示的性能是基于100万次试验,所以结果是非常显著和明显的。使用join()方法比使用+来连接列表中的字符串快6倍多。

那么为什么呢?以下是使用+号连接字符串的底层逻辑:

  1. 对于每个循环,从列表中找到字符串
  2. Python执行器解释表达式result += ' ' + s,并为空格' '申请内存地址。
  3. 然后,执行器意识到空格需要与字符串连接,因此它将为字符串s申请内存地址,这是第一个循环的“The”。
  4. 对于每个循环,执行器都需要申请两次内存地址,一次用于空格,另一次用于待连接的字符串。
  5. 总共有20次的内存分配

然而,调用join()方法时,其底层逻辑则是:

  1. 执行器会计算列表中的字符串个数——共10个。
  2. 这意味着用于连接列表中的字符串的字符串将需要重复10-1=9次。
  3. 它知道总共需要19个内存空间,因此所有需要的内存空间都会一次性申请并预先分配。
  4. 最后,将按顺序放入字符串,并返回结果。

结论

在这篇简短的文章中,我比较了在Python中连接字符串时+操作符和join()方法之间的差异。显然,join()方法是首选,因为它的性能更好。

学习一门编程语言通常是一条很长的曲线,但幸运的是,Python使初学者的学习时间相对较短,这一点绝对是其他语言无法比拟的。当我们真正入门,并开始使用Python之后,不应该止步不前,当我们在保证正确实现需求后,应该设法优化代码,尽可能提升程序性能。通常,技术大牛和普通开发人员之间的区别就在在于对细节的了解。

如果你觉得这篇文章对你有用,请“点赞➕在看➕分享➕关注”支持我(关注我,不迷路🤭🤭🤭),你的点赞和关注就是我持续创作分享的动力,让更多的朋友发现并加入我们,共同学习和进步!

Thank you for reading!

- END -


推荐阅读👇👇👇

Python小技巧:循环不要再使用loc/iloc啦,用这个让你的代码运行速度更快

Python向量化:让你的程序运行速度爆炸性增长

Python探索性数据分析之数据可视化:附实例代码

2024年数据分析师都应该知道的5个高级SQL概念

13个SQL语句:解决90%的数据科学问题!你都知道哪些?



原文作者:数据派探险家;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-12-19

  • 博文量
    119
  • 访问量
    55949