当我们刚开始入门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倍多。
那么为什么呢?以下是使用+号连接字符串的底层逻辑:
result += ' ' + s,并为空格' '申请内存地址。s申请内存地址,这是第一个循环的“The”。然而,调用join()方法时,其底层逻辑则是:
在这篇简短的文章中,我比较了在Python中连接字符串时+操作符和join()方法之间的差异。显然,join()方法是首选,因为它的性能更好。
学习一门编程语言通常是一条很长的曲线,但幸运的是,Python使初学者的学习时间相对较短,这一点绝对是其他语言无法比拟的。当我们真正入门,并开始使用Python之后,不应该止步不前,当我们在保证正确实现需求后,应该设法优化代码,尽可能提升程序性能。通常,技术大牛和普通开发人员之间的区别就在在于对细节的了解。
如果你觉得这篇文章对你有用,请“点赞➕在看➕分享➕关注”支持我(关注我,不迷路🤭🤭🤭),你的点赞和关注就是我持续创作分享的动力,让更多的朋友发现并加入我们,共同学习和进步!
Thank you for reading!
- END -
推荐阅读👇👇👇
Python小技巧:循环不要再使用loc/iloc啦,用这个让你的代码运行速度更快


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