Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数组打印为树_Python_Arrays_Tree_Pretty Print - Fatal编程技术网

Python 将数组打印为树

Python 将数组打印为树,python,arrays,tree,pretty-print,Python,Arrays,Tree,Pretty Print,我有一个数组(树),如: 我想把它打印成一棵树。这是我的尝试 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 + "--")

我有一个数组(树),如:

我想把它打印成一棵树。这是我的尝试

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 + "--")
它打印输出如下:

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

有人能帮我用一种漂亮的格式表示这棵树吗。

有时候,
pprint
做得很好:

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

有时,
pprint
做得很好:

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

您可以使用以下代码示例:

此代码使用python
TkInter
包在一个单独的窗口中绘制树。 您可以通过以下命令在linux中安装TkInter:
sudo apt get install python tk

如果您想生产类似的产品,可以使用此选项:


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

您可以使用以下代码示例:

此代码使用python
TkInter
包在一个单独的窗口中绘制树。 您可以通过以下命令在linux中安装TkInter:
sudo apt get install python tk

如果您想生产类似的产品,可以使用此选项:

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

这与此类似:

from collections import deque
class BTreeNode:
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right

    def insertNode(self, node):
        if node.data < self.data:
            if self.left == None:
                self.left = node
            else:
                self.left.insertNode(node)
        else:
            if self.right == None:
                self.right = node
            else:
                self.right.insertNode(node)

    def printLevel(self):
        """ Breadth-first traversal, print out the data by level """
        level = 0
        lastPrintedLevel = 0
        visit = deque([])
        visit.append((self, level))
        while len(visit) != 0:
            item = visit.popleft()
            if item[1] != lastPrintedLevel:  #New line for a new level
                lastPrintedLevel +=1
                print
            print item[0].data,
            if item[0].left != None:
                visit.append((item[0].left, item[1] + 1))
            if item[0].right != None: 
                visit.append((item[0].right, item[1] + 1))


bt=BTreeNode(1,left=BTreeNode(2,left=BTreeNode(4)), 
   right=BTreeNode(3,left=BTreeNode(5),right=BTreeNode(6)))     



bt.printLevel()  
另一个备选方案:

import math
from cStringIO import StringIO

def show_tree(tree, total_width=33, fill=' '):
    """Pretty-print a tree."""
    output = StringIO()
    last_row = -1
    for i, n in enumerate(tree):
        if i:
            row = int(math.floor(math.log(i+1, 2)))
        else:
            row = 0
        if row != last_row:
            output.write('\n')
        columns = 2**row
        col_width = int(math.floor((total_width * 1.0) / columns))
        output.write(str(n).center(col_width, fill))
        last_row = row
    print output.getvalue()
    print '-' * total_width
    print
    return

show_tree(range(15)) 
印刷品:

                0                
       1               2        
   3       4       5       6    
 7   8   9   10  11  12  13  14 
---------------------------------  
现在,只需确定数据的根是什么,然后递归地附加到一个BTree,您就在那里了。

这与此类似:

from collections import deque
class BTreeNode:
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right

    def insertNode(self, node):
        if node.data < self.data:
            if self.left == None:
                self.left = node
            else:
                self.left.insertNode(node)
        else:
            if self.right == None:
                self.right = node
            else:
                self.right.insertNode(node)

    def printLevel(self):
        """ Breadth-first traversal, print out the data by level """
        level = 0
        lastPrintedLevel = 0
        visit = deque([])
        visit.append((self, level))
        while len(visit) != 0:
            item = visit.popleft()
            if item[1] != lastPrintedLevel:  #New line for a new level
                lastPrintedLevel +=1
                print
            print item[0].data,
            if item[0].left != None:
                visit.append((item[0].left, item[1] + 1))
            if item[0].right != None: 
                visit.append((item[0].right, item[1] + 1))


bt=BTreeNode(1,left=BTreeNode(2,left=BTreeNode(4)), 
   right=BTreeNode(3,left=BTreeNode(5),right=BTreeNode(6)))     



bt.printLevel()  
另一个备选方案:

import math
from cStringIO import StringIO

def show_tree(tree, total_width=33, fill=' '):
    """Pretty-print a tree."""
    output = StringIO()
    last_row = -1
    for i, n in enumerate(tree):
        if i:
            row = int(math.floor(math.log(i+1, 2)))
        else:
            row = 0
        if row != last_row:
            output.write('\n')
        columns = 2**row
        col_width = int(math.floor((total_width * 1.0) / columns))
        output.write(str(n).center(col_width, fill))
        last_row = row
    print output.getvalue()
    print '-' * total_width
    print
    return

show_tree(range(15)) 
印刷品:

                0                
       1               2        
   3       4       5       6    
 7   8   9   10  11  12  13  14 
---------------------------------  

现在,只要确定数据的根是什么,然后递归地附加到一个B树上,你就可以了。

请定义“漂亮的格式”…看看他们是如何在这里打印树的:树可能有点像你想用漂亮的格式,我的意思是,像这样:请定义“漂亮的格式”…看看他们是如何在这里打印树的:树可能有点像你想用漂亮的格式,我的意思是,比如:嘿,非常感谢,但是你能用这种格式得到这棵树吗?我是说,任何地方都可以。嘿,非常感谢,但是你能用这种格式得到这棵树吗?我是说,任何地方都可以