【问题标题】:How to pprint a tree data structure that is implemented using classes?如何打印使用类实现的树数据结构?
【发布时间】:2017-02-16 15:13:59
【问题描述】:

我知道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。

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多