Генератор реверса Python

Разработчик SQL

17
задан ak. 13 October 2009 в 16:04
поделиться

3 ответа

Вы не можете реверсировать генератор каким-либо общим способом, кроме как путем преобразования его в последовательность и создания на ее основе итератора. Более поздние члены генератора не обязательно могут быть известны до тех пор, пока не будут вычислены более ранние.

Что еще хуже, вы не можете знать, попадет ли ваш генератор когда-либо в исключение StopIteration, пока вы не нажмете его, поэтому нет никакого способа узнать, какой член в вашей последовательности будет первым.

Лучшее, что вы могли do означало бы написать функцию reversed_iterator:

def reversed_iterator(iter):
    return reversed(list(iter))

РЕДАКТИРОВАТЬ: Вы также можете, конечно, заменить здесь reversed на свою итеративную версию на основе imap, чтобы сохранить создание одного списка.

24
ответ дан 30 November 2019 в 12:07
поделиться

reverse (list (input_generator)) , вероятно, самый простой способ.

Невозможно получить значения генератора в "обратном" порядке, не собрав их все в последовательность во-первых, потому что создание второго элемента вполне может зависеть от того, был сгенерирован первый.

6
ответ дан 30 November 2019 в 12:07
поделиться

Вы все равно должны пройти через генератор, чтобы получить первый элемент, так что вы можете также составить список. Попробуйте

reversed(list(g))

, где g - генератор.

reversed(tuple(g))

также подойдет (я не проверял, есть ли существенная разница в производительности).

4
ответ дан 30 November 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: