首页 > 解决方案 > 嵌套生成器到嵌套列表

问题描述

我有时会遇到这样一种情况,即我正在使用一个生成器,其成员本身就是生成器(等等 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>]

这同样没用。

是否有一个简单的命令可以打印一直评估的嵌套生成器?

我知道我可以编写一个递归函数来做到这一点,但我正在寻找一种简单的方法。

标签: pythonpython-3.xdebugginggeneratorpretty-print

解决方案


您可以编写一个递归函数来评估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]]

推荐阅读