Kri*_*Pal 18 python printing tree python-2.7
我正在寻找树打印的可能实现,它以用户友好的方式打印树,而不是作为对象的实例.
我在网上遇到了这个解决方案:
来源:http://cbio.ufs.ac.za/live_docs/nbn_tut/trees.html
class node(object):
def __init__(self, value, children = []):
self.value = value
self.children = children
def __repr__(self, level=0):
ret = "\t"*level+repr(self.value)+"\n"
for child in self.children:
ret += child.__repr__(level+1)
return ret
Run Code Online (Sandbox Code Playgroud)
此代码以下列方式打印树:
'grandmother'
'daughter'
'granddaughter'
'grandson'
'son'
'granddaughter'
'grandson'
Run Code Online (Sandbox Code Playgroud)
是否可以获得相同的结果但不改变__repr__方法,因为我将它用于其他目的.
编辑:
解决方案无需修改__repr__和__str__
def other_name(self, level=0):
print '\t' * level + repr(self.value)
for child in self.children:
child.other_name(level+1)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 20
是的,将__repr__代码移动到__str__,然后调用str()您的树或将其传递给print语句.还记得__str__在递归调用中使用:
class node(object):
def __init__(self, value, children = []):
self.value = value
self.children = children
def __str__(self, level=0):
ret = "\t"*level+repr(self.value)+"\n"
for child in self.children:
ret += child.__str__(level+1)
return ret
def __repr__(self):
return '<tree node representation>'
Run Code Online (Sandbox Code Playgroud)
演示:
>>> root = node('grandmother')
>>> root.children = [node('daughter'), node('son')]
>>> root.children[0].children = [node('granddaughter'), node('grandson')]
>>> root.children[1].children = [node('granddaughter'), node('grandson')]
>>> root
<tree node representation>
>>> str(root)
"'grandmother'\n\t'daughter'\n\t\t'granddaughter'\n\t\t'grandson'\n\t'son'\n\t\t'granddaughter'\n\t\t'grandson'\n"
>>> print root
'grandmother'
'daughter'
'granddaughter'
'grandson'
'son'
'granddaughter'
'grandson'
Run Code Online (Sandbox Code Playgroud)
为什么不将其存储为treelib 对象并打印出来,就像我们在这里打印 CHAID 树一样,其中包含与您的用例相关的更多相关节点描述?
\n\n([], {0: 809, 1: 500}, (sex, p=1.47145310169e-81, chi=365.886947811, groups=[[\'female\'], [\'male\']]))\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ([\'female\'], {0: 127, 1: 339}, (embarked, p=9.17624191599e-07, chi=24.0936494474, groups=[[\'C\', \'<missing>\'], [\'Q\', \'S\']]))\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ([\'C\', \'<missing>\'], {0: 11, 1: 104}, <Invalid Chaid Split>)\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ([\'Q\', \'S\'], {0: 116, 1: 235}, <Invalid Chaid Split>)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ([\'male\'], {0: 682, 1: 161}, (embarked, p=5.017855245e-05, chi=16.4413525404, groups=[[\'C\'], [\'Q\', \'S\']]))\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ([\'C\'], {0: 109, 1: 48}, <Invalid Chaid Split>)\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ([\'Q\', \'S\'], {0: 573, 1: 113}, <Invalid Chaid Split>)\nRun Code Online (Sandbox Code Playgroud)\n