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

标签 python recursion text hierarchical-clustering dendrogram

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

                ---- 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

关于python - 如何在终端中显示简单的文本树状图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862834/

相关文章:

python - yFinance 的 JSON 解码错误 [JSONDecodeError : Expecting value: line 1 column 1 (char 0)]

sql - 递归查询在服务器上执行但不在本地执行

ruby-on-rails - 使用 Rails 渲染多行文本?

php - 使用 PHP 将 Post 数据写入文件

python - 如何在Python中从Excel列表中读取时间戳

python - 为什么__getattribute__存在无限递归循环风险?

python - os.environ 没有显示一些变量

ruby - 如何将此算法从 Ruby 转换为 Clojure?

java - 我的 Java 递归斐波那契函数有什么问题?

jQuery 获取页面中所有元素的文本