由于生成器懒惰地返回值,我如何确定从生成器返回的值是否是一个但是最后一个?我在这上花了一个小时就无法理解.
任何帮助赞赏.它甚至可能吗?
谢谢,Boda Cydo!
kra*_*oti 10
您可以将生成器包装在生成器中,该生成器生成一对对,其第一个元素是布尔值,告诉您元素是否是最后一个:
def ending(generator):
z2 = generator.next()
z1 = generator.next()
for x in generator:
yield (False, z2)
z2, z1 = z1, x
yield (True, z2)
yield (False, z1)
Run Code Online (Sandbox Code Playgroud)
让我们在一个简单的迭代器上测试它:
>>> g = iter('abcd')
>>> g
<iterator object at 0x9925b0>
Run Code Online (Sandbox Code Playgroud)
你应该得到:
>>> for is_last_but_one, char in ending(g):
... if is_last_but_one:
... print "The last but one is", char
...
The last but one is c
Run Code Online (Sandbox Code Playgroud)
太了解引擎盖下发生了什么:
>>> g = iter('abcd')
>>> for x in ending(g):
... print x
...
(False, 'a')
(False, 'b')
(True, 'c')
(False, 'd')
Run Code Online (Sandbox Code Playgroud)