python编码:循环添加字符串的效率改进

来源:互联网 发布:mac怎么搜索硬盘文件 编辑:程序博客网 时间:2024/06/16 13:20
#假设buf里有很多字符串,或者我们可以从buf里提取出来很多字符串,我们需要把这些字符串用'\n'连接起来。str = ''for s in buf:    str += s + '\n'
运行之后我们会发现程序运行的特别慢,效率非常低,这是为什么呢?

python里字符串是不可变的,所以每次str += s的时候,都是将str和s拷贝成一个新的字符串,然后赋给str。随着循环的增加,所要拷贝的内容越来越多,字符串的长度越来越长,最后导致str0被拷贝N+1此,str1被拷贝N次,呈指数级的增加。

这里提供两种解决方案。

  • 读写文件形式
f = open('temp.txt', 'w')for s in buf:    f.write(s+'\n')f.close()f = open('temp.txt', 'r')str = f.read()f.close()


  • 数组缓存方式
arr = []for s in buf:    arr.append(s)str = ','.join(arr)