加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

为比特串联,为什么列表比字符数组更快

发布时间:2020-12-16 21:50:13 所属栏目:Python 来源:网络整理
导读:在下面链接的文章中,作者比较了python中不同字符串连接方法的效率: http://www.skymind.com/~ocrow/python_string/ 我不明白的一件事是,为什么方法3(可变字符阵列)导致比方法4(加入字符串列表)明显更慢的性能 它们都是可变的,我认为它们应具有相似的性能.

在下面链接的文章中,作者比较了python中不同字符串连接方法的效率:
http://www.skymind.com/~ocrow/python_string/

我不明白的一件事是,为什么方法3(可变字符阵列)导致比方法4(加入字符串列表)明显更慢的性能

它们都是可变的,我认为它们应具有相似的性能.

最佳答案
“它们都是可变的”会误导你一点.

确实,在list-append方法中,列表是可变的.但建立清单并不是缓慢的部分.如果你有1000个平均长度为1000的字符串,你就会对数组进行1000000次突变,但只有1000个突变到列表中(加上1000个增量到字符串对象).

特别是,这意味着阵列必须花费1000倍的时间来扩展(分配新存储并复制到目前为止的全部内容).

list方法的缓慢部分是最后的str.join调用.但这不是可变的,也不需要任何扩展.它使用两次传递,首先计算所需的大小,然后将所有内容复制到其中.

此外,str.join中的代码已经(并且自9年前开始编写该文章以来一直有很多工作要优化它),因为它是一种非常常见且推荐的习惯用法,许多真正的程序依赖于每一个天;数组几乎没有被触及,因为它首次被添加到语言中.

但是,如果你真的想要了解这些差异,你必须看看来源.在2.7中,数组方法的主要工作是在array_fromstring,而list方法的主要工作是在string_join.你可以看到后者如何利用我们已经知道所有字符串的事实在开始时加入,而前者不能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读