我遇到了一个令人烦恼的问题:我有一棵树,想要递归遍历它。在递归期间,我想保存当前路径,因为在节点中只保存当前值。我使用以下代码:
def getPaths(tree, level, path):
copyPath = list(path)
if level > 1:
if not tree.children:
'''do some non important stuff'''
for child in tree.children:
copyPath.append(child.data.value)
getPaths(child,level+1, copyPath)
首先,我试图在不复制列表的情况下简单地执行此操作,但这显然无法正常工作。但即使我复制列表,似乎只使用一个全局列表来收集所有值,而不是将它们路径收集到不同的列表中。
我很感激这个(可能)容易出问题的一些帮助。
答案 0 :(得分:3)
如果您想以不可变的方式执行此操作,请查看itertools
和chain
方法:
for child in tree.children:
getPaths(child, level+1, chain(path, [child.data.value]))
现在你有一个iterator
可以迭代,而不依赖于复制列表,而是代表最初的路径"加上一个新的"节点。"
修改强>:
请记住,您正在处理iterator
,以便如果您希望能够迭代它并将其传递给另一个函数,您可能需要tee
它(也来自itertools) 。)