如何递归替换元组对列表?

时间:2015-04-20 23:18:18

标签: python list recursion merge

我在撰写函数时遇到了一些麻烦:

[(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是根。

或者,如果有更好的方法来构建数据,换句话说,如果我所做的是愚蠢的,我可以接受建议。

1 个答案:

答案 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]]]]]]]