list()和dict()与生成器之间的区别

时间:2015-06-09 07:19:58

标签: python list dictionary generator

以下示例中list()dict()之间区别的原因是什么:

glist = (x for x in (1, 2, 3))
print(list(glist))
print(list(glist))

gdict = {x:y for x,y in ((1,11), (2,22), (3,33))}
print(dict(gdict))
print(dict(gdict))

>>>
[1, 2, 3]
[]
{1: 11, 2: 22, 3: 33}
{1: 11, 2: 22, 3: 33}

3 个答案:

答案 0 :(得分:3)

区别在于只有第一个表达式glist是生成器,第二个表达式gdictdict - 理解。如果你改变[x for x in (1, 2, 3)]的第一个,那么这两个只是等价的。

立即评估理解。

答案 1 :(得分:1)

这些是完全不同的东西。第一个表达式是一个生成器:在第一次迭代之后,它已经耗尽,因此进一步的迭代是空的。

第二个是字典理解:就像列表理解一样,它每次都返回一个新对象,在本例中是一个dict。所以每次迭代都是在一个新的字典上。

答案 2 :(得分:0)

一个例子可以更好地理解这一点。

调用next的{​​{1}}方法来生成每个元素。

generator

现在在我们的生成器对象上调用>>> a = (i for i in range(4)) >>> a.next() 0 >>> a.next() 1 >>> a.next() 2 >>> a.next() 3 >>> a.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> >>> list(a) [] 函数。

list

现在在列表理解上调用>>> a = (i for i in range(4)) >>> list(a) [0, 1, 2, 3] >>> list(a) []

list

因此列表理解和字典理解是相似的,这导致实际数据不像生成元素的生成器。