我在编写函数时遇到了麻烦:

[(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]]]]]]]

08-26 23:01