我在编写函数时遇到了麻烦:
[(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是根。
另外,如果总体上有更好的方法来构造数据,换句话说,如果我在做的事很愚蠢,那么我愿意接受建议。
最佳答案
如果您使用字典,则类似这样的方法应该可以工作:
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]]]]]]]