Difference between list() and dict() with generators
本问题已经有最佳答案,请猛点这里访问。
那么,在下面的例子中,
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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} |
区别在于,只有第一个表达式
立即评估理解力。
这些是完全不同的东西。第一个表达式是一个生成器:在第一次迭代之后,它将耗尽,因此进一步的迭代是空的。
第二个是听写理解:和列表理解一样,它每次都返回一个新对象,在本例中是听写,所以每次迭代都在新听写之上。
一个例子可以更好地理解这一点。
调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> 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) [] |
现在在生成器对象上调用
1 2 3 4 5 | >>> a = (i for i in range(4)) >>> list(a) [0, 1, 2, 3] >>> list(a) [] |
号
现在打电话给我们名单上的
1 2 3 4 5 | >>> a = [i for i in range(4)] >>> list(a) [0, 1, 2, 3] >>> list(a) [0, 1, 2, 3] |
所以列表理解和听写理解是相似的,导致实际数据不像生成元素的生成器。