Python 中,字符串"连接"效率最高的方式是?一定出乎你的意料

开发 开发工具
网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作。如果连接的字符串很少,只有几个或者十几个,完全可以通过「+」来连接,毕竟这种方式更直白,而超过一定个数之后,则应该采用「join」方法,只有在操作大数据的时候,两者的对比才明显。

网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作。说前者效率更高,它以更少的代价创建新字符串,如果用「+」连接多个字符串,每连接一次,就要为字符串分配一次内存,效率显得有点低,这样的解释听起来很有道理,但 Cpython 解释器是不是真的按照我们说的这样呢?

今天做了一个试验,结果可能会出乎你的意料。

  1. def join(n): 
  2.     s = "".join((str(i) for i in range(n))) 
  3.  
  4. def format(n): 
  5.     ("{}" * n).format(*(i for i in range(n))) 
  6.  
  7. def plus(n): 
  8.     s = "" 
  9.     for i in range(n): 
  10.         s += str(i) 

上面 3 个函数分别表示用「join」和「format」还有「+」操作来连接字符串,从 0 到 n,总共 n 个数字连接起来构成一个新的字符串,形如:1234567891011……n。

下面是测试脚本:

Python 中,字符串\"连接\"效率***的方式是?一定出乎你的意料

每组取了15个样本数据,分别用 1,2,4,8,… 8192 个数字相连接,得到的统计数据可以看出,在数据量非常少的时候,三者效率几乎没什么差异,当少于20个字符串连接时,用「+」效率甚至更高,不过,随着字符串的个数增多,「join」方法发挥出来效果了,而用「+」越来越慢。这点无论是 python2 还是 python3 基本上是一样的。

python2.7.10

python2.7.10

python3.6.0

python3.6.0

所以结论是:如果连接的字符串很少,只有几个或者十几个,完全可以通过「+」来连接,毕竟这种方式更直白,而超过一定个数之后,则应该采用「join」方法,只有在操作大数据的时候,两者的对比才明显。

通过现象看本质才能做到知其然并知其所以然。Cpython 编译器内部其实针对字符串做了非常多的优化工作。

***,做任何事我们都不能仅凭三言两语就听信于人,而应该带着质疑的精神去探索这个世界。

【本文是51CTO专栏作者“刘志军”的原创文章,作者微信公众号:Python之禅(VTtalk)】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2020-07-29 17:15:19

Java人脸识别人工智能

2021-02-26 09:04:22

数组ArrayListHashMap

2010-10-12 11:13:51

2010-05-25 15:58:45

MySQL连接字符串

2015-10-21 11:09:08

Xcode7调试神技

2011-07-11 15:36:44

JavaScript

2019-10-29 20:13:43

Java技术程序员

2010-03-16 17:14:19

Python字符串

2010-03-16 17:41:14

Python字符串

2010-06-17 16:13:05

SQL Server

2022-06-27 07:32:00

JavaArrayList语法糖

2015-08-06 13:30:56

商铺线上

2022-07-20 07:29:52

Java

2021-01-14 10:38:41

Java枚举工具

2009-08-20 18:23:29

C#中SQL连接字符串

2009-11-26 13:11:24

PHP字符串

2009-12-01 09:18:50

PHP分割字符串

2021-01-28 23:40:58

编程语言PythonPerl

2011-05-31 13:41:00

C语言

2009-08-21 15:06:09

C#连接字符串
点赞
收藏

51CTO技术栈公众号