这段时间要准备一个语言培训,在做ppt的过程中,为了说明平常字符串操作使用哪种比较好学习到的一个方法进行效率的比较,在这里记录一下。
#! /usr/bin/python
import timeit
str_list = ["This is a very long string here,
ahahhahahahahahhahahah" for n in range(100000)]
def
join_test():
return ''.join(str_list)
def
plus_test():
result =
''
for str_value in str_list:
result = result + str_value
return result
if __name__ == '__main__':
join_timer = timeit.Timer("join_test()", "from __main__ import
join_test")
join_timer.timeit(number=100)
plus_timer = timeit.Timer("plus_test()", "from __main__ import
plus_test")
print plus_timer.timeit(number=100)
从上面的分析检测就可以看出当字符串规模越大的时候它们效率差别越明显。造成这种结果的原因是由于使用操作符+做连接字符串的操作时,由于字符串是不可变对象。如果要去连接如下字符串S1+S2+S3+S4+S5+S6....+Sn时,执行一次+操作符便会在内存中申请一块新的内存空间,并将上一次操作的结果和本次操作的右操作数复制到新申请的内存空间。因此在N个字符串连接操作中会产生N-1个中间结果。N越大对内存申请和复制次数越多,+操作符的效率就越低。
而join方法连接字符串的时候,会首先计算需要申请的总的内存空间,然后一次性申请所需内存并将字符串中的每一个元素复制到内存中去,所以join的时间复杂度为O(n)。