首页 > 解决方案 > “扁平化”列表包含列表列表到列表列表

问题描述

这个问题不同于将列表列表/嵌套列表转换为没有嵌套的列表列表(这会产生一组非常具体的响应,但不能解决我的情况),也不同于许多“将列表扁平化到列表”的答案。

我想获取一个列表列表,其中一些又是列表列表,并“展平”为列表列表(不仅仅是列表!)。

作为一个具体的例子,我想从这个开始:

my_list_of_lists = [[1, 2, 3], [[9, 10], [8, 9, 10], [3, 4, 6]], [11, 12, 13]]

对此

target_list_of_lists = [[1, 2, 3], [9, 10], [8, 9, 10], [3, 4, 6], [11, 12, 13]]

(从视觉上看,我想把外层列表的所有[[]] 里面[分别变成和]。)

标签: pythonlist

解决方案


这是一种方法:

def flatten(lst, dh=None):
    # Added so user does not need to pass output list
    if (dh is None):  
        dh = []
    for elem in lst:
        # Will not try to iterate through empty lists
        if elem and (isinstance(elem[0], list)):  
            flatten(elem, dh)
        else:
            dh.append(elem)
    return dh

my_list_of_lists = [[1, 2, 3], [[9, 10], [8, 9, 10], [3, 4, 6]], [11, 12, 13]]
target_list_of_lists = flatten(my_list_of_lists)
print(target_list_of_lists)

输出:

[[1, 2, 3], [9, 10], [8, 9, 10], [3, 4, 6], [11, 12, 13]]

这适用于任何长度和任何深度的列表。


推荐阅读