python中有效的字符串合并方法

python中有效的字符串合并方法

ID:8806145

大小:108.26 KB

页数:7页

时间:2018-04-08

python中有效的字符串合并方法_第1页
python中有效的字符串合并方法_第2页
python中有效的字符串合并方法_第3页
python中有效的字符串合并方法_第4页
python中有效的字符串合并方法_第5页
资源描述:

《python中有效的字符串合并方法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Python中有效的字符串合并方法 介绍在Python编程语言中,构造一些较长的字符串事常常会产生一些运行很慢的代码。本文我将研究不同字符串合并方法的计算性能。在Python中,字符串(string)对象是不可变的(每次关联一个新的字符串变量都会在内存中创建一个新的对象)(译注:类同于Java,.NET等现代语言,他们都会在其VM中保留一个字符串池,里面保存所有产生的目标字符串值或临时字符串值)。这方面它与perl、VB等语言中的字符串变量可以任意修改有所不同。如果使用一些比较显而易见的方法(比如:每次都是在新产生的字符串末尾添加一个

2、新短字符串片段)从一些短字符串片段构造长字符串在Python中可能会不是很有效率。每次你的在字符串末尾添加内容,Python解释器都会创建一个新的对象并且复制新产生的对象和原来的对象到解释器中(译注:应该是复制到Python解释器的字符串常量池中)。随着处理的字符串的增多,这样的处理过程将会越来越慢。其他一些其他的方法呢?他们是否有效并且与原始方法相比它们性能方面如何?我决定试试一些其他的构造长字符串的方法,并看看它们在效率上都有啥不同。为了比较,我需要一个测试程序来调用大量的字符串片段构造长字符串。它不应该有太多的额外计算,好让我们

3、测试的性能仅仅依赖于字符串操作的性能。我的测试用例是合并一些从0到某个大整数的数字。这样我们也可以很容易的改变需要产生字符串的大小(译注:改变那个大整数)。比如前20个整数产生如下的字符串:0123456789010111213141516171819尽管这个特别的测试问题不会有任何的现实应用,但我想,因为它很容易编程并且在概念和计算上都简单,那么它能是一个很好的测试用例。这些字符串片段在值和长度上都不同,这也可以防止解释器或硬件对依赖于重复字节的优化(译注:比如对重复相同的字符串进行压缩等处理)。我不认为Python解释器真的这样做

4、了,但是作为测试的一个好原则就是不能受这种优化情况的影响。六个方法下面是我测试的一些方法,每小段Python代码都返回相同的字符串。方法一:朴素的添加(Method1:Naiveappending)defmethod1():out_str=''fornuminxrange(loop_count):out_str+=`num`returnout_str对于我来说,这是解决该问题的最显而易见的方法。使用字符串连接操作(+=)添加每个字符串片段到字符串中。loop_count告诉我们要添加的字符串片段数。第四行中的数字num两边的重音符(`

5、`)会把整数转换为相对于的字符串。你可以使用str()方法完成一样的功能,但是,比较起来它可能稍慢些,因此我所有的方法中都是使用重音符(``)。如我说言,尽管很浅显,但是这个方法根本不是很有效(译注:maybe应该加个”率”子)。你可以再下面的测试中看到它每秒仅仅能合并3770个字符串片段。如果你需要合并很多的字符串片段,那么这可能不是很好的解决方法。方法二:MutableString 类(Method2:MutableStringclass)defmethod2():fromUserStringimportMutableString

6、out_str=MutableString()fornuminxrange(loop_count):out_str+=`num`returnout_strPython类库中包括一个MutableString类。根据其文档描述它主要用于教学目的(译注:"mutablestringobjects Pythonstringsareimmutableobjects.Thishastheadvantage,thatstringsmaybeusedasdictionarykeys.Ifthispropertyisn'tneededandyouin

7、sistonchangingstringvaluesinplaceinstead,youmaycheatanduseMutableString. Butthepurposeofthisclassisaneducationalone:topreventpeoplefrominventingtheirownmutablestringclassderivedfromUserStringandthanforgettherebytoremove(override)the__hash__methodinheritedfromUserString.

8、Thiswouldleadtoerrorsthatwouldbeveryhardtotrackdown.Afasterandbettersolutionistorewriteyourprogramusinglists."

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。