如何打印使用 [=10=] 实现的树数据结构?
How to pprint a tree data structure that is implemented using classes?
我知道 pprint
可以 pretty-print 嵌套列表或字典,它们都是树结构类型,但我想 pprint
一个 class-based 树任意数量的 children,使得节点根据它们在树中的级别向右缩进。
pprint
可以用来做我想做的事吗?如果可以,怎么做?我可以编写自己的函数 pretty-print 是一棵树,但我想检查是否需要这样做。
考虑以下示例:
class Tree:
def __init__(self, value, *args):
self.value = value
self.children = args
tree = Tree("+", Tree(1), Tree("*", Tree(2), Tree(3)))
这是我的预期输出,如果我们要 pretty-print 树:
+
1
*
2
3
同样,我当然可以推出自己的功能,但我想看看我是否可以使用 pprint
来代替它是否会更容易,我只是忽略了一些东西。
pprint documentation 没有为我的用例提供示例。
如果有区别,我正在使用 Python 2.7.
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
我知道 pprint
可以 pretty-print 嵌套列表或字典,它们都是树结构类型,但我想 pprint
一个 class-based 树任意数量的 children,使得节点根据它们在树中的级别向右缩进。
pprint
可以用来做我想做的事吗?如果可以,怎么做?我可以编写自己的函数 pretty-print 是一棵树,但我想检查是否需要这样做。
考虑以下示例:
class Tree:
def __init__(self, value, *args):
self.value = value
self.children = args
tree = Tree("+", Tree(1), Tree("*", Tree(2), Tree(3)))
这是我的预期输出,如果我们要 pretty-print 树:
+
1
*
2
3
同样,我当然可以推出自己的功能,但我想看看我是否可以使用 pprint
来代替它是否会更容易,我只是忽略了一些东西。
pprint documentation 没有为我的用例提供示例。
如果有区别,我正在使用 Python 2.7.
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