python字符串的拼接与分割(Python字符串通过'+'和join函数拼接新字符串的性能测试比较)
类别:脚本大全 浏览量:899
时间:2022-01-15 01:13:04 python字符串的拼接与分割
Python字符串通过'+'和join函数拼接新字符串的性能测试比较有一道Python面试题, 以下代码有什么局限性,要如何修改
|
def strTest(num): s = 'Hello' for i in range (num): s + = 'x' return s |
上面的代码其实可以看出:由于变量str是不变对象,每次遍历,Python都会生成新的str对象来存储新的字符串,所以num越大,创建的str对象就越多,内存消耗约大,速度越慢,性能越差。 如果要改变上面的问题,可以变字符串拼接为join联合的方式,代码如下:
|
def strTest2(num): s = 'Hello' l = list (s) for i in range (num): l.append( 'x' ) return ''.join(l) |
下面两种不同处理方式,运行速度的比较:
|
>>> def strTest1(num): ... s = 'Hello' ... for i in range (num): ... s + = 'x' ... return s >>> def strTest2(num): ... s = 'Hello' ... l = list (s) ... for i in range (num): ... l.append(s) ... return ''.join(l) >>> >>> from timeit import timeit # 运行10万级别数据,运行速度比对 >>> timeit( "strTest1(100000)" , setup = "from __main__ import strTest1" , number = 1 ) 0.016680980406363233 >>> timeit( "strTest2(100000)" , setup = "from __main__ import strTest2" , number = 1 ) 0.009688869110618725 # 运行100万级别数据,运行速度比对 >>> timeit( "strTest1(1000000)" , setup = "from __main__ import strTest1" , number = 1 ) 0.14558920607187195 >>> timeit( "strTest2(1000000)" , setup = "from __main__ import strTest2" , number = 1 ) 0.1335057276853462 # 运行1000万级别数据,运行速度比对 >>> timeit( "strTest1(10000000)" , setup = "from __main__ import strTest1" , number = 1 ) 5.9497953107860475 >>> timeit( "strTest2(10000000)" , setup = "from __main__ import strTest2" , number = 1 ) 1.3268972136649921 # 运行2000万级别数据,运行速度比对 >>> timeit( "strTest1(20000000)" , setup = "from __main__ import strTest1" , number = 1 ) 21.661270140499056 >>> timeit( "strTest2(20000000)" , setup = "from __main__ import strTest2" , number = 1 ) 2.6981786518920217 # 运行3000万级别数据,运行速度比对 >>> timeit( "strTest1(30000000)" , setup = "from __main__ import strTest1" , number = 1 ) 49.858089123966295 >>> timeit( "strTest2(30000000)" , setup = "from __main__ import strTest2" , number = 1 ) 4.285787770209481 # 运行4000万级别数据,运行速度比对 >>> timeit( "strTest1(40000000)" , setup = "from __main__ import strTest1" , number = 1 ) 86.67876273457563 >>> timeit( "strTest2(40000000)" , setup = "from __main__ import strTest2" , number = 1 ) 5.328653452047092 # 运行5000万级别数据,运行速度比对 >>> timeit( "strTest1(50000000)" , setup = "from __main__ import strTest1" , number = 1 ) 130.59138063819023 >>> timeit( "strTest2(50000000)" , setup = "from __main__ import strTest2" , number = 1 ) 6.8375931077291625 # 运行6000万级别数据,运行速度比对 >>> timeit( "strTest1(60000000)" , setup = "from __main__ import strTest1" , number = 1 ) 188.28227241975003 >>> timeit( "strTest2(60000000)" , setup = "from __main__ import strTest2" , number = 1 ) 8.080144489401846 # 运行7000万级别数据,运行速度比对 >>> timeit( "strTest1(70000000)" , setup = "from __main__ import strTest1" , number = 1 ) 256.54383904350277 >>> timeit( "strTest2(70000000)" , setup = "from __main__ import strTest2" , number = 1 ) 9.387400816458012 # 运行8000万级别数据,运行速度比对 >>> timeit( "strTest1(80000000)" , setup = "from __main__ import strTest1" , number = 1 ) 333.7185806572388 >>> timeit( "strTest2(80000000)" , setup = "from __main__ import strTest2" , number = 1 ) 10.946627677462857 |
从上面的比对数据可以看出,当数据比较小的时候,两者差别不大,当数据越大,两者性能差距就越大。从而可以看出,字符串拼接的方式一旦碰到大数据处理的时候,性能是非常慢的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/Jerry_1126/article/details/86584936
您可能感兴趣
- 如何用python画函数图(使用python绘制二元函数图像的实例)
- python中encode中文自定义编码(详解Python解决抓取内容乱码问题decode和encode解码)
- python函数大全详细(详解Python函数式编程—高阶函数)
- python爬取百度搜索pdf文档(Python实现的爬取百度文库功能示例)
- python高德地图可视化(利用python和百度地图API实现数据地图标注的方法)
- python 常用模块函数(Python OOP类中的几种函数或方法总结)
- python画折线图(python使用Plotly绘图工具绘制水平条形图)
- ocr公式识别python(初探利用Python进行图文识别OCR)
- python创建hbase命名空间(python使用phoenixdb操作hbase的方法示例)
- python开启线程池(对python:threading.Thread类的使用方法详解)
- python解析身份证号(python验证身份证信息实例代码)
- python的多线程比多进程效率高(Python中单线程、多线程和多进程的效率对比实验实例)
- python操作redis(Python获取Redis所有Key以及内容的方法)
- python二叉树是怎么来的(Python二叉树的镜像转换实现方法示例)
- python最火开源项目(5月份Github上Python开源项目排行)
- wxpython 弹出对话框显示图片(WxPython建立批量录入框窗口)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
- 《红 雄安》系列广播剧第一集 水上奇兵雁翎队(雄安系列广播剧第一集)
- 小说 小伙穿越成刘备,用现代知识指挥作战,众谋士都看呆了(小伙穿越成刘备)
热门推荐
- HttpServerUtility类的常用方法
- SqlServer数据库中文乱码问题解决方法(SqlServer数据库中文乱码问题解决方法)
- django框架基础之路由详解(Django中如何防范CSRF跨站点请求伪造攻击的实现)
- echarts柱状图颜色设置(Echarts基本入门之柱状图、折线图通用配置)
- js使用canvas(JavaScript canvas实现七彩时钟效果)
- pyqt5加载chrome浏览器(PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例)
- vue react和angular(详解React Angular Vue三大前端技术)
- mysqlgroupby语句实现原理(Mysql中错误使用SQL语句Groupby被兼容的情况)
- docker部署redis集群查看版本(docker下的 redis 之持久化存储详解)
- css有三种基本的定位机制(10个非常实用的CSS hack技术)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9