Вы не можете инвертировать генератор любым общим способом, кроме как приведением его к последовательности и созданием итератора из этого. Более поздние условия генератора не могут быть известны, пока не будут рассчитаны более ранние.
Еще хуже, вы не можете знать, попадет ли когда-либо ваш генератор в исключение StopIteration, пока вы не нажмете его, поэтому нет никакого способа узнать, какой будет даже первый член вашей последовательности.
Лучшее, что вы можете сделать, - написать функцию reversed_iterator:
def reversed_iterator(iter):
return reversed(list(iter))
РЕДАКТИРОВАТЬ: Вы также можете, конечно, заменить обратное в этом на вашу итеративную версию на основе imap, чтобы сохранить одно создание списка.