我试图通过迭代到一个叶子遍历一棵树,然后返回到根节点并迭代到下一个叶子,直到到达树的末尾。
当我将当前节点重置为root时,我的生成器表达式会重置,我该如何保留它?
class New_node(object):
def __init__(self, data=''):
self.data = data
self.children = []
def add_child(self, obj):
self.children.append(obj)
def child_data(self):
return [c.data for c in self.children]
def select_child(self, letter):
return self.children[self.child_data().index(letter)]
def next_child(self):
for c in self.children:
yield c
for c in node.child_data()
...
...
...
try:
node = node.next_child().next()
except StopIteration:
node = root
答案 0 :(得分:0)
我不确定我是否完全理解你在for循环中所做的事情,但这里有一个你可以迭代的生成器方法。
def traverse(self, ancestors=list()):
if self.children:
for c in self.children:
c.traverse(ancestors+[self])
else:
for a in ancestors:
yield a
yield self
答案 1 :(得分:0)
yield
语句使其成为生成器。所以next_child
方法是一个生成器。生成器通常用于for
循环
要从for
循环中获取生成器中的下一个元素,请初始化生成器并在其上调用next
函数。
child = node.next_child().next
for c in node.child_data()
...
...
...
try:
node = child()
except StopIteration:
node = root