4

我正在阅读以下主题:使用 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 中,为什么还要用 来创建实际列表range?不是xrange( 0, len(x), 2 )更节省内存吗?解决方案 2 的相同问题:zip创建一个实际列表。为什么不使用itertools.izip呢?

4

2 回答 2

2

为什么要费心创建带有范围的实际列表?

是的,xrange(0, len(x), 2)内存效率更高。

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

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

这真的有区别吗?

速度差异可能很小。只有当数据超过内存缓存的大小时,内存效率才会转化为速度的提高。一些好处被迭代器的开销所抵消。

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

所以这很可能是“无事生非”。

Python 3 怎么样?

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

于 2017-08-07T02:25:26.087 回答
0

我所知道的

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

是通常的“Pythonic”方式。在 Python 中优化内容的方法是始终分析并查看时间花在了哪里。如果上述方法适用于您的应用程序,为什么要优化它?

于 2013-09-07T14:36:50.470 回答