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()