如何在终端中显示简单的文本树状图



我正在尝试使用一个简单的文本树状图绘制一些数据(按距离划分的国家组),该图将显示在我的终端中,如下所示:

                ---- Monaco
        ----|
                ---- Croatia
            ----|
                ---- Montenegro
    ----|
            ---- Serbia
        ----|
            ---- Slovenia
----|
            ---- Austria
        ----|
                ---- Switzerland
            ----|
                ---- Germany
    ----|
                    ---- Belgium
                ----|
                        ---- Netherlands
                    ----|
                        ---- France
            ----|
                    ---- Sweden
                ----|
                        ---- Denmark
                    ----|
                        ---- Norway

我将数据存储在一对簇及其距离的矩阵中,称为 draw_clusters ,它看起来像这样:

['Monaco', [[[[['Croatia ', 'Montenegro ', 1.9148542155126762], ['Serbia ', 'Slovenia ', 2.469532658074352], 2.6659130840453282], ['Austria ', ['Switzerland ', 'Germany', 1.8487591643481294], 2.843561940573178], 3.3080033351363003],['...', '...']...[...]]

到目前为止,我写了这段代码,但我不知道如何递归调用该函数,以便它将文本树状图绘制到终端中:

def draw_dendrogram(draw_clusters):
    for cluster in range(len(draw_clusters)):
        dendrogram(draw_clusters[cluster], 0, 0, 0)
def dendrogram(cluster, x, y, distance):
    node = "|"
    vertical_line = "---"
    print(cluster)

任何人都可以帮我提供任何提示,因为我是 Python 的新手,我不确定递归应该如何工作?

我对你的矩阵的结构有点困惑。所以我需要做一些假设,比如每个列表代表一个二进制节点,前两个值可能会导致更新的节点,而第三个数值无论如何都不会在你的树状图中使用。

如果以下矩阵是有效的矩阵:

mat = [
        [   ['Croatia ', 'Montenegro ', 1.9148542155126762],
            ['Serbia ', 'Slovenia ', 2.469532658074352],
            2.6659130840453282],
        ['Austria ',
            ['Switzerland ', 'Germany', 1.8487591643481294],
            2.843561940573178],
        4.5656]

您可以使用以下方法轻松打印其树状图:

def print_node(data,spaces = ""):
    if type(data)==type([]):
        print_node(data[0],spaces+" "*5) #here is first recursive call
        print(spaces,"----|")
        print_node(data[1],spaces+" "*5) #second recursive call
    else:
        print(spaces,"----",data)

这将产生如下输出:

                ---- Croatia 
           ----|
                ---- Montenegro 
      ----|
                ---- Serbia 
           ----|
                ---- Slovenia 
 ----|
           ---- Austria 
      ----|
                ---- Switzerland 
           ----|
                ---- Germany

相关内容

  • 没有找到相关文章

最新更新