您的位置:首页 > 编程语言 > Python开发

python 多叉树 import treelib / class 'generator' 的处理方法

weixin_43973433 2020-03-15 18:23 105 查看 https://blog.csdn.net/weixin_4

python 多叉树 import treelib / class 'generator' 的处理方法


知识: 多叉树 import treelib

最近做项目用到python里多叉树的包,十分方便。

  1. 安装
# windows
pip install treelib
# linux
sudo easy_install -U treelib
  1. 官方用法函数调用说明:https://treelib.readthedocs.io/en/latest/treelib.html?
# 示例:
import treelib
from treelib import Tree, Node

class Nodex(object):
def __init__(self,x,y):
self.sit = [x,y]
tree = Tree()
tree.create_node('a', 1, data = Nodex(1,1))
tree.create_node('b', 2, parent = 1, data = Nodex(1,2))
tree.create_node('c', 3, parent = 1, data = Nodex(1,3))
tree.create_node('d', 4, parent = 2, data = Nodex(3,4))
tree.show()
tree.show(data_property = 'sit') #按data里的sit变量显示
#输出:
a
├── b
│   └── d
└── c

[1, 1]
├── [1, 2]
│   └── [3, 4]
└── [1, 3]

知识: 生成器 generator

treelib里有个函数rsearch(nid, filter=None),它的作用是找到该节点到根的路径。

rsearch(nid, filter=None)
# Traverse the tree branch along the branch from nid to its ancestors (until root).
# Parameters:filter – the function of one variable to act on the Node object.

但是我们直接调用会发现,这个函数返回值并不是list,而是<class ‘generator’>

a=tree.rsearch(4, filter=None)
print(a)
print(type(a))
#输出
<generator object Tree.rsearch at 0x0000000004F8D2C8>
<class 'generator'>

因为generator是按需生成并“返回”结果,而不是一次性产生所有的返回值,甚至有时候根本就不知道所有的返回值。
generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

若要打印出rsearch(nid, filter=None)的结果,则需采用生成器的处理方法。

a=tree.rsearch(4, filter=None)
p=[]
while True:
try:
p.append(next(a))
except StopIteration as e:
break
print(p)
#输出
[4, 2, 1]

本博客为原创作品,欢迎指导,转载请说明出处,附上本文链接,谢谢

  • 点赞
  • 收藏
  • 分享
  • 文章举报
萝卜upupup 发布了7 篇原创文章 · 获赞 1 · 访问量 54 私信 关注
标签: