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

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

最佳答案

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

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

    return total

09-10 03:21
查看更多