使用List comprehension进行递归函数

时间:2014-01-25 21:58:53

标签: python list recursion list-comprehension

我已经让这个功能在没有列表理解的情况下工作了,但是,我想知道如何用一个来做:

def flatten(L): 
    a_list = [] 

    for i in L: 
        if isinstance(i, list): 
            gl = flatten(i) 
            for n in gl: 
                a_list.append(n)

        else: 
            a_list.append(i) 

    return a_list 

    #  This is how I've attempted to use list comprehension, but I get a Syntax
    #  error and I'm not sure why.

    return [n for n in flatten(i) if isinstance(i, list) else i for i in L] 

1 个答案:

答案 0 :(得分:2)

语法错误可以修复,你的优先级错误,你需要括号:

return [(n for n in flatten(i)) if isinstance(i, list) else i for i in L]

不幸的是,这不会做你想做的事情,而且一个列表理解是不可能的。

列表推导生成一个结果输入(就像map操作),因此您无法生成大于原始列表的列表,这是展平所必需的。

在此处寻找替代解决方案:Flatten (an irregular) list of lists

相关问题