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

python – 关于内存效率:范围vs xrange,zip vs izip

发布时间:2020-12-20 13:36:59 所属栏目:Python 来源:网络整理
导读:我正在阅读以下主题: Make dictionary from list with python 最初的问题是将元组(1,’a’,2,’b’,3,’c’)转换为字典{1:’a’,2:’b’,3:’c’}.给出了许多有趣的解决方案,包括以下两个: 解决方案1: dict(x[i:i+2] for i in range(0,len(x),2)) 解决
我正在阅读以下主题: Make dictionary from list with python

最初的问题是将元组(1,’a’,2,’b’,3,’c’)转换为字典{1:’a’,2:’b’,3:’c’}.给出了许多有趣的解决方案,包括以下两个:

解决方案1:

dict(x[i:i+2] for i in range(0,len(x),2))

解决方案2:

dict(zip(*[iter(val_)] * 2))

在解决方案1中,为什么还要创建具有范围的实际列表呢? xrange(0,2)不会更有内存效率吗?解决方案2的相同问题:zip创建一个实际列表.为什么不使用itertools.izip呢?

解决方法

为什么要创建带范围的实际列表呢?

是的,xrange(0,2)的内存效率更高.

为什么不在解决方案2中使用itertools.izip()?

是的,zip()创建一个实际列表,因此您可以使用itertools.izip来节省内存.

这真的有所作为吗?

速度差异可能很小.仅当数据超出内存缓存的大小时,内存效率才能提高速度.迭代器的开销抵消了一些好处.

由于字典存储了键和值,因此元组中保存的唯一内存指向键和值.因此,在这种情况下的节省比其他迭代器应用程序要小得多,后者不会在容器中累积所有结果.

所以这很可能“无所事事”.

那么Python 3呢?

在Python 3中,range()和zip()都返回迭代器.

(编辑:李大同)

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

    推荐文章
      热点阅读