gpt4 book ai didi

python - 关于内存效率 : range vs xrange, zip vs izip

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:53 24 4
gpt4 key购买 nike

我正在阅读以下主题:Make dictionary from list with python

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

解决方案一:

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

解决方案 2:

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

在解决方案 1 中,为什么要创建带有 range 的实际列表? 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 vs xrange, zip vs izip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com