【发布时间】:2011-11-29 20:44:15
【问题描述】:
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)
Node 是一个简单的树状数据结构。列表的第一个元素始终是 Node 的值,后面的元素将是子元素。如果 Node 使用列表以外的其他内容启动,则该值将是 that,而 children 将是 [],一个空列表。
a = Node([1,[10,20,30],[100,200,300]])
>>> list(node_recurse_generator(a))
[1]
现在,对所有元素都有一个递归迭代器会很棒,但我的生成器只产生第一个元素。为什么会这样?
【问题讨论】:
-
但是请注意,您构建树的方式容易出错:以下代码演示了这一点:
b = [1,2,3]a = [0,b]n = Node(a)print(list(node_recurse_generator(n)))print(list(node_recurse_generator(n)))a[0] = 7 # does not affect nb[2] = 4 # affects nprint(list(node_recurse_generator(n)))b = [100,200,300] # from here on, changes in b no longer affect nprint(list(node_recurse_generator(n)) )
标签: python recursion generator