标签:python range itertools memorycache xrange
我正在阅读以下主题: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,len(x),2)不会更有内存效率吗?解决方案2的相同问题:zip创建一个实际列表.为什么不使用itertools.izip呢?
解决方法:
为什么要创建带范围的实际列表呢?
是的,xrange(0,len(x),2)的内存效率更高.
为什么不在解决方案2中使用itertools.izip()?
是的,zip()创建一个实际列表,因此您可以使用itertools.izip来节省内存.
这真的有所作为吗?
速度差异可能很小.仅当数据超出内存缓存的大小时,内存效率才能提高速度.迭代器的开销抵消了一些好处.
由于字典存储了键和值,因此元组中保存的唯一内存指向键和值.因此,在这种情况下的节省比其他迭代器应用程序要小得多,后者不会在容器中累积所有结果.
所以这很可能“无所事事”.
那么Python 3呢?
在Python 3中,range()和zip()都返回迭代器.
标签:python,range,itertools,memorycache,xrange 来源: https://codeday.me/bug/20190709/1408243.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。