Вложенный генератор во вложенный список - PullRequest
1 голос
/ 22 февраля 2020

Иногда я сталкиваюсь с ситуацией, когда работаю с генератором, члены которого сами являются генераторами (и т. Д. Для n уровней).

При отладке печать этих результатов приводит к бесполезному <generator object blah at blah>

Очевидно, я могу сделать print(list(my_gen)), чтобы преобразовать верхний уровень в список. Но тогда я получаю

[<generator object blah at blah>, <generator object blah at blah>, <generator object blah at blah>]

, что в равной степени бесполезно.

Есть ли простая команда для печати вложенного генератора, оцененного полностью вниз?

Я знаю, что я мог бы написать рекурсивную функцию для этого, но я ищу простой метод.

1 Ответ

4 голосов
/ 22 февраля 2020

Вы можете написать рекурсивную функцию для оценки вложенного генератора N-уровня . Я не думаю, что для этого существует встроенная функция.

import types

def _gen(gen):
    if not isinstance(gen,types.GeneratorType):
        return gen
    else:
        return [_gen(i) for i in gen]

my_gen=((j for j in range(i)) for i in range(10))

print(_gen(my_gen))

[[],
 [0],
 [0, 1],
 [0, 1, 2],
 [0, 1, 2, 3],
 [0, 1, 2, 3, 4],
 [0, 1, 2, 3, 4, 5],
 [0, 1, 2, 3, 4, 5, 6],
 [0, 1, 2, 3, 4, 5, 6, 7],
 [0, 1, 2, 3, 4, 5, 6, 7, 8]]
...