<p>您当前的输出<code>[[1], [1, 2], [1, 2, 5], [1, 2, 5, 3], [1, 2, 6], [1, 2, 6, 7], [1, 2, 4]]</code>是一个扁平化列表。第一步是把它折叠成树状结构。然后你可以通过一个简单的装饰器来渲染它。(下面的代码是用python3.6.1测试的)</p>
<pre><code># to fold a tree you need first to get the leave for each flattened branch at proper levels
# toleavel([1,2,5]) > [[[5]]]
def toleave(branch):
if branch[1:] == []:
return [branch[0]]
else:
return [toleave(branch[1:])]
# fold the flattened tree
def fold(flattened_tree):
if flattened_tree == []:
return []
else:
return toleave(flattened_tree[0]) + fold(flattened_tree[1:])
# decorator for rendering
def render(f):
render.level = -2
indent = ' '
def _f(*args):
render.level += 1
try:
result = f(*args)
if not isinstance(result, list):
print(render.level*indent, result)
finally:
render.level = -2
return result
return _f
# go over a tree and render it
@render
def tree_render(tree):
if not isinstance(tree, list):
return tree
elif tree == []:
return []
else:
return [tree_render(tree[0])] + [tree_render(tree[1:])]
flattened_tree = [[1], [1, 2], [1, 2, 5], [1, 2, 5, 3], [1, 2, 6], [1, 2, 6, 7], [1, 2, 4]]
tree_render(fold(flattened_tree))
# output:
# 1
# 2
# 5
# 3
# 6
# 7
# 4
</code></pre>