我还在学习,所以要温柔。
给出以下代码。
str = "sometext"
it = iter(str)
print it
print len(list(it))
print len(list(it))
我得到以下输出。
<iterator object at 0x1070b9990>
8
0
为什么对象的内容只能使用一次?
答案 0 :(得分:5)
迭代器是如何工作的:一旦你对某些元素进行迭代,除了创建一个新的迭代器并重新开始之外,不会再回头了。
答案 1 :(得分:2)
Iterator仅供一次性使用(或更好的&#34;消费内容一次&#34;)并完成:
>>> text = "sometext"
>>> it = iter(text)
>>> it
<iterator at 0x7f7ea01aead0>
>>> lst = list(it)
>>> lst
['s', 'o', 'm', 'e', 't', 'e', 'x', 't']
list
已遍历所有内容并完成。
再次尝试使用迭代器:
>>> it.next()
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-18-54f0920595b2> in <module>()
----> 1 it.next()
导致StopIteration
例外。
接下来,你必须再次创建迭代器:
>>> it = iter(text)
并使用它。事实上,迭代意味着在其上调用next()
(这是list
在内部所做的事情):
>>> it.next()
's'
>>> it.next()
'o'
>>> it.next()
'm'
>>> it.next()
'e'
>>> it.next()
't'
>>> it.next()
'e'
>>> it.next()
'x'
>>> it.next()
't'
>>> it.next()
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-18-54f0920595b2> in <module>()
----> 1 it.next()
请注意,list
次迭代(和for
循环)会捕获StopIteration
异常并且不会将其传播出去,因为它只是&#34;没有更多项目可以获取& #34;
你想下次尝试吗?获得新鲜的迭代器。这个用尽了。