python – 关于内存效率:范围vs xrange,zip vs izip
我正在阅读以下主题:
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()都返回迭代器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |