使用递归展平任意嵌套列表

时间:2017-07-07 00:29:30

标签: python python-3.x recursion

我有一个关于递归的问题。

def f6(lst):
result = []
if type(lst[0]) == list:
    return f6(lst[0])
else:
    result.append(lst[0])

    if lst[1]:
        return f6(lst[1])

    else:
        return result

我想从多维列表输入中创建一维列表。 例如,当我放["baa",[4,True,[10, 5],[1,2,['moo']]],['chirp']]时 ,我想采取["baa",4,True,10, 5,1,2,'moo','chirp']

但它在index out of range

时出现if lst[1]:错误

我不能将lst[1]用作真/假条件吗? 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您没有处理列表可以按任意顺序包含任意数量的元素和嵌套列表的条件。您需要初始化一个results列表,然后在每个元素之间运行一个循环并检查该元素是否是列表的实例(这比type(x) == list更清晰),如果是,则make递归调用,并扩展results列表。否则,将该元素附加到results

def f6(lst):
    result = []
    for i in lst:
        if not isinstance(i, list):
            result.append(i)
        else:
            result.extend(f6(i))

    return result

使用f6(["baa",[4,True,[10, 5],[1,2,['moo']]],['chirp']])调用此选项会产生:

['baa', 4, True, 10, 5, 1, 2, 'moo', 'chirp']