我在撰写函数时遇到了一些麻烦:
[(232, [230, 231]), (148, [144, 145, 147, 232]), (231, [214, 215])]
到
[[148, [144, 145, 147, [232, [230, [231, [214, 215]]]]]]]
每个元组中的第一个元素是相应列表元素中元素的父元素。 148是根(该值存储在其他地方的变量中)并从根开始我需要用相应的列表替换232,然后在刚刚替换232的列表中替换231。
它需要是一个通用的递归解决方案,因为我最终会遇到一个更复杂的案例,例如:
[(227, [187, 188, 190, 192, 242]), (240, [238, 239, 305]), (305, [307, 308, 309]), (242, [256, 257, 258]), (247, [227, 245, 246]), (248, [247]), (188, [189, 191]), (190, [233, 234, 240])]
其中248是根。
或者,如果有更好的方法来构建数据,换句话说,如果我所做的是愚蠢的,我可以接受建议。
答案 0 :(得分:1)
如果您正在使用词典,那么这样的事情应该有效:
original = {232: [230, 231], 148: [144, 145, 147, 232], 231: [214, 215]}
def expand(data, number, dest):
if data.get(number):
res = []
for n in data.get(number):
expand(data, n, res)
dest.append([number, res])
else:
dest.append(number)
return dest
print expand(original, 148, [])
[[148, [144, 145, 147, [232, [230, [231, [214, 215]]]]]]]