【问题标题】:Nested generator to nested list嵌套生成器到嵌套列表
【发布时间】:2020-06-06 13:14:00
【问题描述】:

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

同样没用。

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

我知道我可以编写一个递归函数来执行此操作,但我正在寻找一种简单的方法。

【问题讨论】:

  • this 可能是相关的。注意递归打印生成器会耗尽它们(如果你不使用tee 或其他东西) - 所以打印它们会改变它们。
  • “我知道我可以写一个递归函数来做到这一点,但我正在寻找一种简单的方法。”那是一个简单的方法。你也不必使用递归,但无论如何,你必须写一些东西,因为如果你正在寻找的话,没有内置的解决方案
  • @juanpa.arrivillaga 我们可以不使用递归吗?你能否详细说明如何做到这一点。我认为递归是唯一的方法。

标签: python python-3.x debugging generator pretty-print


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2015-01-01
    • 1970-01-01
    • 2018-08-02
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多