Python 字符串上的迭代

Python 字符串上的迭代,python,iterator,Python,Iterator,我还在学习,所以要温柔 给定以下代码 str = "sometext" it = iter(str) print it print len(list(it)) print len(list(it)) 我得到以下输出 <iterator object at 0x1070b9990> 8 0 8. 0 为什么对象的内容只能使用一次?迭代器就是这样工作的:一旦你对某些元素进行了迭代,除了创建一个新的迭代器并重新开始,就再也没有回头路了。迭代器只是一次性使用(或者更好的方法是“一次消

我还在学习,所以要温柔

给定以下代码

str = "sometext"
it = iter(str)
print it
print len(list(it))
print len(list(it))
我得到以下输出

<iterator object at 0x1070b9990>
8
0

8.
0

为什么对象的内容只能使用一次?

迭代器就是这样工作的:一旦你对某些元素进行了迭代,除了创建一个新的迭代器并重新开始,就再也没有回头路了。

迭代器只是一次性使用(或者更好的方法是“一次消费内容”),可以这样做:

>>> text = "sometext"
>>> it = iter(text)
>>> it
<iterator at 0x7f7ea01aead0>
>>> lst = list(it)
>>> lst
['s', 'o', 'm', 'e', 't', 'e', 'x', 't']
导致
StopIteration
异常

要继续,必须再次创建迭代器:

>>> it = iter(text)
并使用它。事实上,迭代意味着对其调用
next()
(这是
list
内部所做的):

>>it.next()
's'
>>>it.next()
“哦”
>>>it.next()
“我是
>>>it.next()
“e”
>>>it.next()
“不”
>>>it.next()
“e”
>>>it.next()
“x”
>>>it.next()
“不”
>>>it.next()
---------------------------------------------------------------------------
StopIteration回溯(最后一次调用)
在()
---->1.it.next()
请注意,
list
iteration(和
for
loops)确实捕获了
StopIteration
异常,并且不会将其传播出去,因为这是“无更多项目可获取”的简单标志


你想再试一次吗?获取新的迭代器。这个人筋疲力尽了。

。。。或者迭代字符串。为什么对象的内容只能使用一次?--这是国际热核聚变实验堆(iter)返回的结果谢谢你的解释。我在想,如果我正在创建一个对象,我可以对它执行多个操作。你的解释完全有道理。再次感谢你。
>>> it = iter(text)
>>> 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()