2017-02-16 104 views
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 documentation不提供對我的使用情況的一個例子。

如果它的確與衆不同,我使用Python 2.7。

回答

2

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 
+1

謝謝!這似乎是一個文檔錯誤,[pprint文檔](https://docs.python.org/2/library/pprint.html)沒有提及'__repr__'。 –