Python从嵌套列表中提取所有子列表

0 投票
1 回答
1778 浏览
提问于 2025-04-19 02:38

我有一个嵌套的列表,里面的元素本身也是列表。我想把所有的子列表找出来,然后把它们合并成一个单一的列表:

比如说:

[[a], [b,[c,[d,e]]], [f,g]]

我想要一个包含原始列表中所有现有子列表(合并后的)的列表,也就是:

[[a], [b,c,d,e], [c,d,e], [d,e], [f,g]]

我使用了一个递归函数,但问题是我又得到了嵌套的子列表,这正是我不想要的。而且我的问题不是关于处理不规则列表的。

1 个回答

1

我们将使用一个辅助函数,这个函数可以把一个嵌套的列表和所有子列表变成一个扁平化的形式,也就是说,把里面的所有元素都提取出来,放在一个一维的列表里:

def flattened_list_and_sublists(l):
    # First return value is l, flattened.
    # Second return value is a list of flattened forms of all nested sublists
    # of l.

    flattened = []
    flattened_sublists = []

    for i in l:
        if isinstance(i, list):
            i_flattened, i_flattened_sublists = flattened_list_and_sublists(i)
            flattened += i_flattened
            flattened_sublists.append(i_flattened)
            flattened_sublists += i_flattened_sublists
        else:
            flattened.append(i)
    return flattened, flattened_sublists

然后,你想要的那个函数就可以返回上面那个函数的第二个返回值:

def all_flattened_sublists(l):
    l_flattened, l_sublists_flattened = flattened_list_and_sublists(l)
    return l_sublists_flattened

撰写回答