2017-02-16 5 views
3

私は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を使用しています。

答えて

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 documentation](https://docs.python.org/2/library/pprint.html)に '__repr__'という言葉がないドキュメントバグのようです。 –

関連する問題