[英]Display a list of lists as a tree in Python
我想定義一個函數,將具有常見組件的列表列表打印為樹。
例如,
lst = [[1, 2, 'a'], [1, 2, 'b'], [1, 1, 'a'], [1, 1, 'b'], [2, 2, 'a']]
build_tree(lst)
應該打印:
1
1
a
b
2
b
2
2
a
我寫了下面的代碼。
def build_tree(lst):
if len(lst[0]) == 1:
for e in lst:
return str(e[0])
current = lst[0][0]
seen = []
tree = ''
for e in lst:
if e[0] != current:
tree += str(current)
tree += build_tree(seen)
current = e[0]
seen = []
seen.append(e[1:])
return tree
但是返回的結果是胡說八道。
解決此問題的一種方法是將列表更改為樹結構,然后在該樹上循環以構建數據的字符串表示形式
from collections import defaultdict
tree = lambda: defaultdict(tree)
lst = [[1, 2, 'a'], [1, 2, 'b'], [1, 1, 'a'], [1, 1, 'b'], [2, 2, 'a']]
def make_tree(lst):
d = tree()
for x in lst:
curr = d
for item in x:
curr = curr[item]
return d
d = make_tree(lst)
def make_strs(d, indent=0):
strs = []
for k, v in d.items():
strs.append(' ' * indent + str(k))
strs.extend(make_strs(v, indent+1))
return strs
def print_tree(d):
print('\n'.join(make_strs(d)))
print_tree(d)
版畫
1
2
a
b
1
a
b
2
2
a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.