如何拼合2个深度列表,返回一个没有任何子列表的列表

时间:2018-06-12 15:37:20

标签: python list flatten

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

例如,[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

然而,该算法会产生错误。如果有人可以提供帮助那就太棒了。此外,如果有人可以显示一个递归路径来解决这个问题,那么任意“深度”列表都可以展平(我当前的算法只能展平2D数组)

1 个答案:

答案 0 :(得分:2)

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

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

    return total