展开作为嵌套列表存储的树结构



我正在编写一段代码,该代码模拟通过一系列节点的可能路径。节点被分配编号,连接的节点被列在一个查找表中。由于路径有时会分裂为两个(或多个)可能性(有时只有一个,即不分裂),因此我得到了嵌套列表形式的树型结构。对于列表中的每一层,我都得到一个可能延续的列表。例如,路径树看起来像L = [70, [49, [4]], [94, [120, [144]],[121, [150,[173]]]]],即由三个单独的路径[70,49,4],[70,94,120,144][70,94,121,150,173]组成。

是否有一个很好的方法来解开这个树,这样我就可以得到单独的路径?返回的格式并不是很重要,只要我能用它来可视化节点颜色的变化就可以了。注意,我不知道路径有多长(列表的深度),所以递归可能是一个好主意。我也不知道在任何一条路径上有多少个节点,或者一个节点将有多少(允许的)分裂路径,除了所有这些数字都是有限的。手动获取第二个分支的一种方法是L[0], L[2][0], L[2][1][0],L[2][1][1][0],如果这有任何帮助的话。

您确实可以使用递归来实现这一点,例如使用递归生成器:

def unravel(lst):
if len(lst) > 1:
for child in lst[1:]:
for path in unravel(child):
yield [lst[0], *path]
else:
yield lst

像这样调用:

lst = [70, [49, [4]], [94, [120, [144]], [121, [150,[173]]]]]
for path in unravel(lst):
print(path)