上一篇文章我们分析了几种常用的字符串拼接方式,从使用场合和时机对几种方式进行了对比。今天,我们来对比一下这几种方式的性能,以便大家在以后的应用中能迅速找到最优性能的字符串拼接方式。
准备好了吗?马上开始
首先,我们创建一个函数
该函数的作用是:随机生成指定数目的字符串列表(字符串长度为5-8个字符)用于测试。
from random import choice, randint
from string import ascii_letters
def create_str(n):
# 字符列表
r_lst = []
for i in range(n):
# 生成n个字符串
tmp_str = ''
# 随机生成5-8位的字符串
for j in range(randint(5, 8)):
tmp_str += choice(ascii_letters)
r_lst.append(tmp_str)
return r_lst
看下效果,比如生成20个随机(5-8位)的字符串,我们直接使用create_str(20),即可获取。
首先创建一个用于生成字符串的函数
test_str = 'TVOgaNh'+'SsKEWLQM'+'KiacqJ'+'ipwoVhnc'+'EfiRNa'+'qGRgLs'+'RDLdFhn'+'IMyES'+'uDcMK'+'NuzDYQU'+'GOdrJ'+'LhyvA'+'aEgdF'+'kDDHv'+'hsKLZklO'+'KnXeDJNc'+'LvVeo'+'ExNDpCAJ'+'khuDHP'+'BjvuIuA'
其次,我们对测试方法进行分类
我们将前面讨论的方法分为三类(分类方法参照了脚本之家中Python猫发表的一篇《Python拼接字符串的7种方法总结》的博文)
格式化类(%、format()函数)
拼接类(+、join()函数)
插值类(F-strings)
分别取其中一个进行比较看下性能。
格式化类:%和format()函数比较
前提:随机生成1000、10000个字符串列表,使用for循环遍历添加每一个字符串最终获取拼接后的字符串。
格式化类性能比较
从上图可以看到,format()函数和%拼接字符串性能差异不大,选择自己喜欢的就可以了,但是为了增加程序可读性,建议使用format()函数进行拼接。
拼接类:+和join()函数比较
前提:随机生成100000个字符串列表,通过各自方法(for循环和序列拼接)最终获取拼接后的字符串。
拼接类性能比较
从上图可以看出,join()函数在数据量大时,性能明显优于'+'符号拼接。这是因为'+'符号拼接每次拼接时都会开辟一块新的内存空间。因此,在数据量较大时,字符换序列拼接建议直接使用join()函数。
插值类:F-strings分别比较拼接10000个和100000个字符串的效率
测试代码如下所示。
F-strings插值类性能测试
我们与格式化类和拼接类分别进行比较,如下所示。
F-strings插值类性能比较
得出什么结论?
字符串序列拼接,不论数据量大小,首选join()函数;
格式化类处理中,%和format()拼接差别不大,但是format()函数可读性要好一点;
在数据量小于100000,字符串拼接中F-strings性能优于其它拼接方法(前提是Python版本必须大于3.6.2);
数据量少、对程序性能要求不高、程序猿用脑过度时,选用‘+’拼接;
当涉及对字符串格式进行处理时,首选format()函数和F-strings方法。
未完待续
好了,今天的内容就到这里了,我们利用了两篇内容对Python中字符串拼接进行了总结测试,分析了常用的方法,在这些方法中,大家参照结论的基础上,选择自己喜欢常用的方法。有时候,在程序实现初期对性能不要考虑太多,考虑太多有时候会影响程序开发。但是,所谓熟能生巧,接触多了,在选择数据结构或者对数据结构进行处理时,就会自然而然的选择性能表现优秀的方式方法。建议多练习,平时多涉猎相关内容。“书到用时方恨少”,平时多练、多积累类似的知识点,对大家的编程学习也是很有益的。
喜欢的关注我,后续会推出更有意思的内容,大家有没更好的字符串处理办法呢?欢迎留言。
转载请注明出处,百家号:Python高手养成