我试图用一个简单的文本树形图来绘制一些数据(国家组的距离),这些数据将在我的终端中显示如下:
---- 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的新手,我不确定递归应该如何工作?
答案 0 :(得分:1)
我对矩阵的结构有点困惑。所以我需要做一些假设,比如每个列表代表一个二进制节点,前两个值可能会导致更新的节点,并且你的树形图中不会使用第三个数值。
如果以下是有效矩阵:
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