【问题标题】:How to flatten a 2 deep list, return a list without any sublists within如何展平 2 个深度列表,返回一个没有任何子列表的列表
【发布时间】:2018-11-22 01:48:34
【问题描述】:

我正在研究一种“扁平化”列表的算法,实质上是删除列表中的所有子列表。

例如,[2, 3, [3, 4]] 应该变成 [2, 3, 3, 4]。为此,我编写了以下代码:

def flatten(l):
    total = []
    for i in l:
       if i == int:
           total.append(i)
       elif i == list:
           for j in i:
               total.append(j):
    return total

但是,此算法会产生错误。如果有人可以提供帮助,那就太好了。此外,如果有人可以展示解决此问题的递归路径,以便可以展平任意“深度”的列表(我当前的算法只能展平二维数组)

【问题讨论】:

  • 但是,此算法会产生错误。如果有人可以提供帮助,那就太好了。此外,如果有人可以展示解决此问题的递归路径,以便可以展平任意“深度”的列表(我目前的算法只能展平二维数组)
  • 使用isinstance(i,int),如果列表追加每个,否则追加
  • 使用isinstance 而不是==
  • @keda 这不是答案,因为这不是列表列表。这只是一些列表。

标签: python list flatten


【解决方案1】:

这里有两个主要问题 - 首先,您没有正确检查项目的类型(您应该使用 isinstace),其次您没有递归调用函数:

def flatten(l):
    total = []
    for i in l:
       if isinstance(i, list):
           total.extend(flatten(i))       
       else:
           total.append(i)

    return total

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2023-04-08
    • 2013-04-24
    • 2020-10-19
    • 2021-05-16
    相关资源
    最近更新 更多