【问题标题】:Using List comprehension for recursive function对递归函数使用列表推导
【发布时间】:2014-01-25 21:58:52
【问题描述】:

我已经让这个函数在没有列表理解的情况下工作,但是,我想知道如何使用它来完成它:

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] 

【问题讨论】:

  • 强制性问题:错误是什么?
  • 这是一个语法错误,因为他试图做[n for n in flatten(i)],但如果isinstance(i,list) 为假,则做[i for i in L]

标签: python list recursion list-comprehension


【解决方案1】:

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

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

不幸的是,这不会做你想做的事,而且用 one 列表理解是不可能做到的。

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

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

【讨论】:

  • 哦,废话,这行得通吗?我认为您不能使用 else 语句来更改整个列表组合,只能更改值!太棒了!
  • 是的,您的解决方案将生成器添加到列表中。但是,非常感谢您的洞察力!我怀疑我是否可以在一种理解中做到这一点。如果可能的话,我会尝试找出一种更有效的方法。
  • 谢谢,不胜感激!
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2017-07-08
相关资源
最近更新 更多