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