作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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/
我是一名优秀的程序员,十分优秀!