使用python中的索引展平嵌套列表

Mif*_*ffy 5 python-3.x

我有一个清单 ['','','',['',[['a','b']['c']]],[[['a','b'],['c']]],[[['d']]]]

我想用索引展平列表,输出应如下所示:

flat list=['','','','','a','b','c','a','b','c','d']
indices=[0,1,2,3,3,3,3,4,4,4,5]
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

我已经试过了:

def flat(nums):
    res = []
    index = []
    for i in range(len(nums)):
        if isinstance(nums[i], list):
            res.extend(nums[i])
            index.extend([i]*len(nums[i]))
        else:
            res.append(nums[i])
            index.append(i)
    return res,index
Run Code Online (Sandbox Code Playgroud)

但这不能按预期工作。

Rak*_*kmo 0

简单而优雅的解决方案:

def flat(main_list):

    res = []
    index = []

    for main_index in range(len(main_list)):
        # Check if element is a String
        if isinstance(main_list[main_index], str):
            res.append(main_list[main_index])
            index.append(main_index)

        # Check if element is a List
        else:
            sub_list = str(main_list[main_index]).replace('[', '').replace(']', '').replace(" ", '').replace("'", '').split(',')
            res += sub_list
            index += ([main_index] * len(sub_list))

    return res, index
Run Code Online (Sandbox Code Playgroud)