3

我知道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文档没有为我的用例提供示例。

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

4

1 回答 1

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
于 2017-02-16T18:17:46.450 回答