【问题标题】:Generate ID for each node in a tree为树中的每个节点生成 ID
【发布时间】:2020-01-30 08:23:28
【问题描述】:

我使用 python 中的 anytree 模块构建了一棵树。 代码如下:

def list_anytree(lst):
    rootname = lst[0][0]
    node = Node(rootname)
    for j in lst:
        parentnode = node
        assert j[0] == parentnode.name
        for currentnodename in j[1:]:
            currentnode = next(
                (node for node in parentnode.children if node.name == currentnodename),
                None,
            )
            if currentnode is None:
                currentnode = Node((currentnodename), parent=parentnode)
            parentnode = currentnode
    return node

lst=[["a","b","c"],["a","b","d"],["a","b","c",]]

anytree=list_anytree(lst)
for pre,fill,node in RenderTree(anytree):
    print(f"{pre}{node.name}")

如何为树中的每个节点分配一个 ID?

【问题讨论】:

    标签: python python-3.x tree anytree


    【解决方案1】:

    生成的树是:

    a
    └── b
        ├── c
        └── d
    

    节点对象实例本身就已经是一个 id。 您可以随时为对象分配新属性。 例如,当您遍历树时

    for idx, node in enumerate(PreOrderIter(anytree)):
        node.idx = idx
    

    或者你使用 python id() 函数,它给出一个唯一的数字。 请注意,每次调用都会更改此数字:

    for pre, fill, node in RenderTree(anytree):
        id_ = id(node)
        print(f"{pre}{node.name} {node.idx} {id_:08X}")
    

    结果

    a 0 7FE95CDB1390
    └── b 1 7FE95CDB1FD0
        ├── c 2 7FE95CDC4048
        └── d 3 7FE95CDC4080
    

    【讨论】:

    • 我可以在哈希函数的帮助下分配节点ID吗?
    猜你喜欢
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多