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

2024-06-01 00:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

那么在下面的例子中list()和{}之间的区别背后有什么解释:

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}

Tags: infordictlist例子print区别glist
3条回答

举个例子更好地理解这一点。在

调用generatornext方法来生成每个元素。在

>>> 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函数。在

^{pr2}$

现在调用列表理解中的list。在

>>> a = [i for i in range(4)]
>>> list(a)
[0, 1, 2, 3]
>>> list(a)
[0, 1, 2, 3]

所以列表理解和dict理解是相似的,这导致实际数据不像生成元素的生成器。在

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

第二个是dict comprehension:与list comprehension一样,它每次都返回一个新对象,在本例中是dict,因此每次迭代都在一个新dict上

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

立即评估理解力。在

相关问题 更多 >