【问题标题】:Flattening a list recursively - why doesn't my code return what I want?递归地展平列表 - 为什么我的代码不返回我想要的?
【发布时间】:2015-05-18 02:34:33
【问题描述】:

问题:编写一个递归函数flattenList,其中flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]])会返回一个列表[2, 9, 2, 1, 13, 2, 8, 2, 6]

我的代码

def flattenList(lis):
    a = []
    for i in lis:
        if not isinstance(i, list):
            a.append(i)
        else:
            flattenList(i)
    return a

print(flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]]))

虽然所需的输出是 [2, 9, 2, 1, 13, 2, 8, 2, 6],但我得到的是 [2, 9, 8](数字不在子列表中)。

【问题讨论】:

    标签: python-3.x recursion


    【解决方案1】:

    您的递归调用不会将数据添加到结果列表中。所以这个:

    flattenList(i)
    

    应该是:

    a += flattenList(i)
    

    【讨论】:

    • 我明白了。非常感谢!
    • @VictorLoh 如果我的回答解决了您的问题,请单击它左侧的复选标记将其标记为已接受。
    【解决方案2】:

    您需要添加a.extend(flattenList(i))。您目前没有对递归返回做任何事情。

    【讨论】:

      【解决方案3】:

      您可以将函数设为生成器并在 python3 中使用yield from 语法:

      def flattenList(lis):
          for i in lis:
              if not isinstance(i, list):
                  yield i
              else:
                  yield from flattenList(i)
      
      
      print(list(flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]])))
      [2, 9, 2, 1, 13, 2, 8, 2, 6]
      

      【讨论】:

        猜你喜欢
        • 2019-11-17
        • 2021-11-13
        • 1970-01-01
        相关资源
        最近更新 更多