如何使用递归函数操作列表?

How to manipulate a list with recursive function?

我正在尝试以一种不寻常的方式(至少对我而言)操纵给定的列表。

基本上,我有列表 a(也是图像 1),它以第一个索引为主体。现在,我想遍历其他索引,如果某个值与第一个索引中的某个值匹配,我想将该索引的子列表插入到第一个索引中。

不知道我说的够不够清楚,目标应该是列表b(也是图2)。我认为这里应该使用递归函数,但我不知道如何使用。大家觉得有可能吗?

原名单:

a = [[1,2,3],[2,5],[6,3],[10,5]]

预期输出:

b = [[1,2,[2,5,[10,5]],3,[6,3]]]

您可以使用字典来记录每个数字 第一次 出现的位置,记录找到它的列表以及在哪个索引处。如果随后发现一个列表具有已经遇到的值,则可以插入匹配列表来改变记录的列表。如果没有匹配项(第一个列表 [1,2,3] 就是这种情况),那么这个列表只是附加到结果中。

因为插入列表会影响其他插入点,建议先收集插入动作,然后倒序应用:

这是相关代码:

def solve(a):
    dct = {}
    result = []
    insertions = []
    for lst in a:
        found = None
        for i, val in enumerate(lst):
            if val in dct:
                found = val
            else:
                dct[val] = [lst, i]
        if found is None:
            result.append(lst)
        else:
            insertions.append((*dct[found], lst))

    for target, i, lst in reversed(insertions):
        target.insert(i + 1, lst)
        
    return result


# Example run:
a = [[1,2,3],[2,5],[6,3],[10,5]]
print(solve(a))

输出:

[[1, 2, [2, 5, [10, 5]], 3, [6, 3]]]