我有一个组成树的列表列表,类似于具有递归目录和文件列表的顶级目录。我想把它想象成一棵印刷的树。
如何看到以树形式打印的列表?
数据
tree = [
['Main University'],
['Main University', 'Academic Affairs'],
['Main University', 'Academic Affairs', 'College of Health Sciences'],
['Main University', 'Academic Affairs', 'College of Arts & Science'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics', 'Physics'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Biochemistry & Molecular Bio'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Earth Sciences'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Environmental Studies'],
['Main University', 'Academic Affairs', 'College of Health Sciences', 'Social Work'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics', 'Chemistry'],
['Main University', 'Academic Affairs', 'College of Health Sciences', 'Health Sciences'],
['Main University', 'Academic Affairs', 'College of Health Sciences', 'Occupational Therapy']
]想要的输出(或类似的;例如,像¦--、°--等的符号不重要)
Main University
°--Academic Affairs
¦--College of Arts & Science
¦ ¦--Chemistry/Physics
¦ ¦ ¦--Physics
¦ ¦ °--Chemistry
¦ °--Biology
¦ ¦--Biochemistry & Molecular Bio
¦ ¦--Earth Sciences
¦ °--Environmental Studies
°--College of Health Sciences
¦--Health Sciences
¦--Occupational Therapy
°--Social Work 发布于 2022-11-24 09:58:54
如果数组不太大,可以先将其转换为树,然后打印它。
#!/bin/env python3
from collections import OrderedDict
tree = [
['Main University'],
['Main University', 'Academic Affairs'],
['Main University', 'Academic Affairs', 'College of Health Sciences'],
['Main University', 'Academic Affairs', 'College of Arts & Science'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics', 'Physics'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Biochemistry & Molecular Bio'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Earth Sciences'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Environmental Studies'],
['Main University', 'Academic Affairs', 'College of Health Sciences', 'Social Work'],
['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics', 'Chemistry'],
['Main University', 'Academic Affairs', 'College of Health Sciences', 'Health Sciences'],
['Main University', 'Academic Affairs', 'College of Health Sciences', 'Occupational Therapy']
]
class Tree:
def __init__(self, data):
self.data = data
self.children = OrderedDict()
def add_array(self, obj):
if obj:
if obj[0] not in self.children:
self.children[obj[0]] = Tree(obj[0])
self.children[obj[0]].add_array(obj[1:])
def print_tree(self, l):
s = " " * l * 4 + self.data + "\n"
for x in self.children.values():
s += x.print_tree(l+1)
return s
def __repr__(self):
return self.print_tree(0)
root = Tree("root")
for x in tree:
root.add_array(x)
print(root)打印出以下内容
root
Main University
Academic Affairs
College of Health Sciences
Social Work
Health Sciences
Occupational Therapy
College of Arts & Science
Biology
Biochemistry & Molecular Bio
Earth Sciences
Environmental Studies
Chemistry/Physics
Physics
Chemistry发布于 2022-11-24 16:48:14
bigtree软件包可以很好地做到这一点:
from bigtree import list_to_tree, print_tree
path_list = ['/'.join(x) for x in tree]
root = list_to_tree(path_list)
print_tree(root)产量:
Main University
└── Academic Affairs
├── College of Health Sciences
│ ├── Social Work
│ ├── Health Sciences
│ └── Occupational Therapy
└── College of Arts & Science
├── Biology
│ ├── Biochemistry & Molecular Bio
│ ├── Earth Sciences
│ └── Environmental Studies
└── Chemistry
└── Physics
├── Physics
└── Chemistryhttps://stackoverflow.com/questions/74553128
复制相似问题