为树中的每个节点生成 ID
Generate ID for each node in a tree
我使用 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?
生成的树是:
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
我使用 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?
生成的树是:
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