Python 生成器 : correct code recursing a tree

标签 python recursion generator

class Node(object):
    def __init__(self, lst):
        if type(lst) == list:
            self.value = lst[0]
            self.children = lst[1:]
        else:
            self.value = lst
            self.children = []
    @property
    def ChildElements(self):
        return [Node(a) for a in self.children]

    @property
    def GetValue(self):
        return self.value

def node_recurse_generator(node):
    yield node.value
    for n in node.ChildElements:
        node_recurse_generator(n)

节点是一种简单的树状数据结构。列表的第一个元素始终是节点的值,其他元素将是子元素。如果节点是用列表以外的其他东西启动的,则该值将是那个,子节点将是 [],一个空列表。

a = Node([1,[10,20,30],[100,200,300]])
>>> list(node_recurse_generator(a))
[1]

现在,如果有一个遍历所有元素的递归迭代器就好了,但我的生成器只生成第一个元素。为什么会这样?

最佳答案

简单地递归调用 node_recurse_generator 是不够的 - 你必须 yield 它的结果:

def node_recurse_generator(node):
    yield node.value
    for n in node.ChildElements:
        for rn in node_recurse_generator(n):
            yield rn

关于Python 生成器 : correct code recursing a tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7634323/

相关文章:

python - 将展平的一维索引转换为二维索引

python - 为什么 .png 文件不能使用 Python 脚本下载,而它适用于其他图像类型?

python - 从 python 调用 perl 脚本适用于commands.getstatusoutput 但不适用于 subprocess.call

python - 将line_profiler与numba jitted函数配合使用

java - 设计递归时遇到问题,结果有限

javascript - 从树递归生成面包屑

python - 如何使用递归验证函数验证表单

python - 基于生成器的 for 循环和基于列表的 for 循环会产生不同的输出?

c++ - C++ 中的生成器——非静态数据成员的无效使用

.net - 如何在模型优先上调用 Database.SetInitializer?