Предположим, у меня есть произвольно вложенный список, в котором некоторые из вложенных элементов могут быть генераторами.Например:
nested_gens = [
[1, [2, [3, 4]]],
[2, (map(int, '123'))],
[3, (map(str, range(i+1)) for i in range(2))],
{'a': ({k: (float(i) for i in range(2))} for k in 'xyz')},
{'b': {'c': dict(zip(range(3), 'abc'))}}
]
Как я могу рекурсивно пройти через эту структуру и поглотить все объекты генератора?
Мой желаемый вывод:
[
[1, [2, [3, 4]]],
[2, [1, 2, 3]],
[3, [['0'], ['0', '1']]],
{'a': [{'x': [0.0, 1.0]}, {'y': [0.0, 1.0]}, {'z': [0.0, 1.0]}]},
{'b': {'c': {0: 'a', 1: 'b', 2: 'c'}}}
]
Решение этого вопроса может быть обобщено для травления объектов, которые содержат генераторы.Все ответы, которые я нашел для работы с TypeError: can't pickle generator objects
, не касаются вложенных генераторов.
Обновление : решение должно иметь возможность обрабатывать вложенные элементы любого типа.