将数组打印为树

ris*_*p89 1 python arrays tree pretty-print

我有一个数组(树)像:

['Humidity\n', ['High', ['Outlook\n', ['Sunny', ['Temp\n', ['Hot', ['Wind\n', ['Weak', ['No']], ['Strong', ['No']]]], ['Mild', ['No']]]], ['Overcast', ['Temp\n', ['Hot', ['Yes']], ['Mild', ['Yes']]]], ['Rain', ['Temp\n', ['Mild', ['Wind\n', ['Weak', ['Yes']], ['Strong', ['No']]]]]]]], ['Normal', ['Wind\n', ['Weak', ['Outlook\n', ['Rain', ['Yes']], ['Overcast', ['Temp\n', ['Cool', ['Yes']], ['Hot', ['Yes']]]], ['Sunny', ['Yes']]]], ['Strong', ['Temp\n', ['Cool', ['No']], ['Mild', ['Outlook\n', ['Rain', ['Yes']], ['Sunny', ['Yes']]]]]]]]]
Run Code Online (Sandbox Code Playgroud)

我想把它打印成树.这是我的尝试

def printTree(treeToPrint, tab):
    print tab + treeToPrint[0]
    newTab = tab + "--"
    nextTree = treeToPrint[1:]
    for tree in nextTree:
        print newTab + tree[0]
        printTree(tree[1], newTab + "--")
Run Code Online (Sandbox Code Playgroud)

打印输出如下:

Humidity

--High
----Outlook

------Sunny
--------Temp

----------Hot
------------Wind

--------------Weak
----------------No
--------------Strong
----------------No
----------Mild
------------No
------Overcast
--------Temp

----------Hot
------------Yes
----------Mild
------------Yes
------Rain
--------Temp

----------Mild
------------Wind

--------------Weak
----------------Yes
--------------Strong
----------------No
--Normal
----Wind

------Weak
--------Outlook

----------Rain
------------Yes
----------Overcast
------------Temp

--------------Cool
----------------Yes
--------------Hot
----------------Yes
----------Sunny
------------Yes
------Strong
--------Temp

----------Cool
------------No
----------Mild
------------Outlook

--------------Rain
----------------Yes
--------------Sunny
----------------Yes
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我以漂亮的格式表示这棵树.

Pav*_*vel 7

有时,pprint做得好:

>>> from pprint import pprint
>>> pprint(x)
['Humidity\n',
 ['High',
  ['Outlook\n',
   ['Sunny',
    ['Temp\n',
     ['Hot', ['Wind\n', ['Weak', ['No']], ['Strong', ['No']]]],
     ['Mild', ['No']]]],
...
Run Code Online (Sandbox Code Playgroud)


Tha*_*sas 6

您可以使用此处的代码示例:

from turtle import *
from types import *

myTree = ["A",["B",["C",["D","E"],"F"],"G","H"]];

s = 50;
startpos = (0,120)
def cntstrs(list):
  return len([item for item in list if type(item) is StringType])
def drawtree(tree, pos, head=0):
  c = cntstrs(tree)
  while len(tree):
    goto(pos)
    item = tree.pop(0)
    if head:
        write(item,1)
        drawtree(tree.pop(0),pos)
    else:
        if type(item) is StringType:
            newpos = (pos[0] + s*c/4 - s*cntstrs(tree), pos[1] - s)
            down()
            goto((newpos[0], newpos[1] + 15))
            up()
            goto(newpos)
            write(item,1)
        elif type(item) is ListType:
            drawtree(item,newpos)

up()
drawtree(myTree, startpos,1)
Run Code Online (Sandbox Code Playgroud)

此代码使用python TkInter包在树的独立窗口中绘制.您可以通过以下命令在Linux中安装TkInter:sudo apt-get install python-tk

如果你想生产这样的东西,你可以使用它:http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Binary_tree.svg/220px-Binary_tree.svg.png

正如你在评论中提出的那样.但这不能用于控制台中的打印..