1

I ディシジョン ツリーは Python で辞書として実装されています。例:

sampletree = {'spl':'foo', 'go_r':{'cut':150} ,  'l':{'val':100}, 'r':{'val':200}}

ツリーを出力する再帰関数があります。

def TREE_PRINT(tree, indent=''):
    #is this a leaf node?
    if 'val' in tree:
        print str(tree['val'])
    else:
        #print the criteria
        print 'split: '+ str(tree['spl']) + ' ' + str(tree['go_r'])
        #print the branches
        print indent+'L->', TREE_PRINT(tree['l'], indent+'  ')
        print indent+'R->', TREE_PRINT(tree['r'], indent+'  ')

関数を実行したときに出力される None を抑制するにはどうすればよいですか?

TREE_PRINT(sampletree)
split: foo {'cut': 150}
L-> 100
None
R-> 200
None

'' を返そうとしましたが、不要な余分な改行が発生します。集団知能のプログラミングの 151 ページの 'printtree' 関数から構築しています。

4

2 に答える 2

3

関数の戻り値は None です。関数の戻り値を出力しないでください。関数を呼び出すだけです。

def TREE_PRINT(tree, indent=''):
    #is this a leaf node?
    if 'val' in tree:
        print str(tree['val'])
    else:
        #print the criteria
        print 'split: '+ str(tree['spl']) + ' ' + str(tree['go_r'])
        #print the branches
        print indent+'L->',
        TREE_PRINT(tree['l'], indent+'  ')

        print indent+'R->',
        TREE_PRINT(tree['r'], indent+'  ')

結果

分割: foo {'カット': 150}
L-> 100
R-> 200

オンラインでの動作を確認してください: ideone

于 2011-12-05T21:28:56.093 に答える
1

TREE_PRINT文字列表現を出力するか返すかを決定する必要があります。データを出力する必要があることを意味する場合、コードは次のようになります。

def TREE_PRINT(tree, indent=''):
    #is this a leaf node?
    if 'val' in tree:
        print str(tree['val'])
    else:
        #print the criteria
        print 'split: '+ str(tree['spl']) + ' ' + str(tree['go_r'])
        #print the branches
        print indent+'L->',
        TREE_PRINT(tree['l'], indent+'  ')
        print indent+'R->',
        TREE_PRINT(tree['r'], indent+'  ')
于 2011-12-05T21:31:03.837 に答える