gpt4 book ai didi

python - 如何使用 python anytree 获取所有可能的分支

转载 作者:行者123 更新时间:2023-12-02 16:47:34 24 4
gpt4 key购买 nike

我正在使用 anytree目前要生成我的搜索树,我如何以列表格式从根节点开始获取所有可能的分支

from anytree import Node, RenderTree, AsciiStyle

f = Node("f")
b = Node("b", parent=f)
a = Node("a", parent=b)
d = Node("d", parent=b)
c = Node("c", parent=d)
e = Node("e", parent=d)
g = Node("g", parent=f)
i = Node("i", parent=g)
h = Node("h", parent=i)
print(RenderTree(f, style=AsciiStyle()).by_attr())

当前树:

f 
|-- b
| |-- a
| +-- d
| |-- c
| +-- e
+-- g
+-- i
+-- h

想要的输出(treeBranch):

[[f,b,a], [f,b,d,c], [f,b,d,e], [f,g,i,h]]

我不确定是否有更好的方法,欢迎任何建议。

我想使用这个列表来检查树中是否存在来自用户的新路径,例如:

newPath = [f, b]

for branch in treeBranch:
if newPath in branch:
return true
else:
// add new path to tree

最佳答案

您希望每个叶节点都有根路径。只需使用 PreOrderIter使用 filter_ 检索叶节点:

print(list(PreOrderIter(f, filter_=lambda node: node.is_leaf)))
[a, c, e, h]

然后访问path attribute在每个节点上:

print([list(leaf.path) for leaf in PreOrderIter(f, filter_=lambda node: node.is_leaf)])
[[f,b,a], [f,b,d,c], [f,b,d,e], [f,g,i,h]]

如果你想要从树中的任何节点到叶节点的路径:

def allpaths(start):
skip = len(start.path) - 1
return [leaf.path[skip:] for leaf in PreOrderIter(start, filter_=lambda node: node.is_leaf)]
print(allpaths(b))
[(b, a), (b, d, c), (b, d, e)]

请注意还有一个Walker , 它提供从任何节点到另一个节点的路径。

关于python - 如何使用 python anytree 获取所有可能的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com