python字符串切片详解,python中的字符串切片操作
我有一根5 * 10 ^ 6长的大弦。在
我做了一些处理,把它分成16个字符的块。自定义函数用于拆分字符串。假设性能优于向导方法。在
其功能如下。去拼接分离器:
总和=0
威廉0:
block=s[:16]
# assumingtheprocesstobedonewithtablelockisculating itslength .
是sum=Len(block)
s=s[16:]
返回并
和自定义功能:
^{pr2}$
我用cProfiler测试了它们。结果如下。Stringlength(以秒为单位的时间)
-请参考
5000000 289.0 1.274
500000 0.592 0.134
50000 0.25 0.28
5000 0.001 0.003
我生成的字符串如下。s=“”。join ([ str (random.randint (1,9 ) ) forxinxrange ) 500000)
我的问题:你有和定制的正则分配器一样或者更高效的Python表达式吗?有时候会先把整个字符串拆分保存在列表中,然后再进行迭代运算。在
为什么分线器适合小琴弦?(只是对这个感兴趣)
注意:我必须运行的流程(数据)没有返回值。在
编辑
使用让步和改进的拼接分路器,性能结果如下:字符串长度/拼接分路器
-请参考
5000000 0.148 1.274 0.223
500000 0.016 0.134 0.29
50000 0.003 0.28 0.005
5000 ~0.000 0.003 ~0.000
代码:定义打印程序:
gen=(s [ I : I 16 ] foriinxrange (0,Len),16))
总和=0
对于gen中的数据:
Is sum=Len(数据)
返回并
去拼接分离器:
总和=0
forxinxrange(0,Len ) s,16):
block=s[x:x 16]
# assumingtheprocesstobedonewithtablelockisculating itslength .
是sum=Len(block)
返回并
性能提高的原因:Splice Splitter使用sprite为每次迭代重复创建新字符串。正如s=s[16:]wxdxtg在回答中指出的。这就导致了~o(n) 2的时间复杂度。在
当s[x:x 16]代替重复创建字符串s时,代码的复杂度将降低到o(n*16),从而大大提高了性能。Yield/Generator函数执行相同的操作((pythonicSplitter())),但是调用生成器(迭代器),所以完成操作所需的时间由
普通分割器也在做同样的事情,制作长度为16的块。但是,因为Python字符串是不变的,所以创建这些块的时间复杂度要比内置的优化切片函数高得多。在
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。