Vous pouvez envelopper le générateur dans un générateur qui génère une séquence de paires dont le premier élément est un booléen vous indiquant si l'élément est le dernier-mais-un:
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)
Testons sur simple iterator:
>>> g = iter('abcd')
>>> g
<iterator object at 0x9925b0>
Vous devriez obtenir:
>>> 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
voir ce qui est trop Happ forcement sous le capot:
>>> g = iter('abcd')
>>> for x in ending(g):
... print x
...
(False, 'a')
(False, 'b')
(True, 'c')
(False, 'd')
+1 solution intelligente. –
Wow. Merci! Bien que je dois encore envelopper ma tête autour de ce qui se passe dans la «fin» :) Tant de rendements. – bodacydo