如何打印使用类实现的树数据结构?

时间:2017-02-16 15:14:00

标签: python python-2.7 tree pretty-print pprint

我知道pprint可以打印嵌套列表或字典,它们都是树结构的类型,但我希望pprint一个基于类的树,具有任意数量的子节点,这样节点根据它们在树中的级别向右缩进。

pprint可以用来做我想要的,如果是的话,怎么做?我可以编写自己的函数来打印一棵树,但我想检查一下是否需要这样做。

考虑以下示例:

class Tree:
    def __init__(self, value, *args):
        self.value = value
        self.children = args

tree = Tree("+", Tree(1), Tree("*", Tree(2), Tree(3)))

这是我的预期输出,如果我们要漂亮打印树:

+
    1
    *
        2
        3

同样,我当然可以推出自己的功能,但我想看看我是否可以使用pprint代替,如果这样更容易,我只是忽略了一些东西。

pprint documentation没有为我的用例提供示例。

如果它有所作为,我使用的是Python 2.7。

1 个答案:

答案 0 :(得分:3)

pprint适用于定义了__repr__方法的任意类。

为了得到你想要的东西,我认为你必须管理自己的嵌套,此时你可以使用print

def __repr__(self, depth=1):
    return_string = [str(self.value)]
    for child in self.children:
        return_string.extend(["\n", " " * (depth+1), child.__repr__(depth+1)])
    return "".join(return_string)

然后pprint(tree)print tree都会给你

+
  1
  *
   2
   3