如何确定Python生成器中的值是否为1-BUT-LAST?

bod*_*ydo 2 python generator

由于生成器懒惰地返回值,我如何确定从生成器返回的值是否是一个但是最后一个?我在这上花了一个小时就无法理解.

任何帮助赞赏.它甚至可能吗?

谢谢,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)