问题不在于,list()
但iter()
文献记载的是单一用途iterator
.一旦某些东西访问了iterator
元素,迭代器就会永久为空.更常用的可迭代类型(通常)可重用,并且不应混淆这两种类型.
请注意,您不需要iter()
将a range
转换为a list
,因为list()
将a iterable
作为参数:
>>> a = range(1, 3) >>> list(a) [1, 2] >>> list(a) [1, 2]
并且只有iterator
返回的iter()
是单次使用:
>>> b = iter(a) >>> list(b) [1, 2] >>> list(b) [] >>> list(a) [1, 2]
Pynchia.. 5
让我们来看看会发生什么:
>>> a = range(1, 3) >>> a is iter(a) False
正如你所看到的,iter
给出一个新的迭代器对象,它a
本身并不是
>>>> a = iter(a)
a
现在名称对应于不同的迭代器对象iter
给我们(就好像iter(a)
已经返回自己一样,例如它zip
与文件一起发生)
>>> list(a) [1, 2]
因此,耗尽了迭代器
>>> list(a) []
因为迭代器已经被使用(迭代),所以没有给出任何东西
以下是一些您可以尝试完全掌握发生情况的实验:
>>> a = range(1, 3) >>> a range(1, 3) >>> type(a)>>> b = iter(a) >>> b >>> type(b) >>> a is b False >>> list(b) [1, 2] >>> list(b) [] >>> list(a) [1, 2] >>> list(a) [1, 2] >>> a range(1, 3) >>> next(a) Traceback (most recent call last): File " ", line 1, in TypeError: 'range' object is not an iterator >>> b=iter(a) >>> next(b) 1 >>> next(b) 2 >>> next(b) Traceback (most recent call last): File " ", line 1, in StopIteration >>> a=[1,2,3] >>> b=[4,5,6] >>> z=zip(a,b) >>> iter(z) is z True >>> with open('words.txt') as f: ... iter(f) is f ... True
注意:在Python 2上有相当多的函数返回列表而不是迭代器(例如zip
)
问题不在于,list()
但iter()
文献记载的是单一用途iterator
.一旦某些东西访问了iterator
元素,迭代器就会永久为空.更常用的可迭代类型(通常)可重用,并且不应混淆这两种类型.
请注意,您不需要iter()
将a range
转换为a list
,因为list()
将a iterable
作为参数:
>>> a = range(1, 3) >>> list(a) [1, 2] >>> list(a) [1, 2]
并且只有iterator
返回的iter()
是单次使用:
>>> b = iter(a) >>> list(b) [1, 2] >>> list(b) [] >>> list(a) [1, 2]
让我们来看看会发生什么:
>>> a = range(1, 3) >>> a is iter(a) False
正如你所看到的,iter
给出一个新的迭代器对象,它a
本身并不是
>>>> a = iter(a)
a
现在名称对应于不同的迭代器对象iter
给我们(就好像iter(a)
已经返回自己一样,例如它zip
与文件一起发生)
>>> list(a) [1, 2]
因此,耗尽了迭代器
>>> list(a) []
因为迭代器已经被使用(迭代),所以没有给出任何东西
以下是一些您可以尝试完全掌握发生情况的实验:
>>> a = range(1, 3) >>> a range(1, 3) >>> type(a)>>> b = iter(a) >>> b >>> type(b) >>> a is b False >>> list(b) [1, 2] >>> list(b) [] >>> list(a) [1, 2] >>> list(a) [1, 2] >>> a range(1, 3) >>> next(a) Traceback (most recent call last): File " ", line 1, in TypeError: 'range' object is not an iterator >>> b=iter(a) >>> next(b) 1 >>> next(b) 2 >>> next(b) Traceback (most recent call last): File " ", line 1, in StopIteration >>> a=[1,2,3] >>> b=[4,5,6] >>> z=zip(a,b) >>> iter(z) is z True >>> with open('words.txt') as f: ... iter(f) is f ... True
注意:在Python 2上有相当多的函数返回列表而不是迭代器(例如zip
)