如何在嵌套列表中运行forloop,以便循环不断进入每个嵌套循环

时间:2018-11-01 21:43:02

标签: python python-3.x

无论嵌套多深,我都必须从列表中删除空列表

示例a = [2, 3, [[[[[]]]]], [[4, []]] , 5, 6, [], [], []]

所需答案

b = [2, 3, [[4]] , 5, 6 ]

到目前为止我有

def delete_empty_list(x):
   b = [x for x in a if x != []]    
   return(b)

这给了我

b = [2, 3, [[[[[]]]]], [[4, []]], 5, 6]

我不知道如何在列表中的嵌套项目中循环。项目也可以嵌套,但是我的功能仍然可以正常工作。

4 个答案:

答案 0 :(得分:3)

您可以使用递归:

def remove(lst):
    result = []
    for e in lst:
        if isinstance(e, list):
            l = remove(e)
            if l:
                result.append(l)
        else:
            result.append(e)
    return result


a = [2, 3, [[[[[]]]]], [[4, []]], 5, 6, [], [], []]

print(remove(a))

输出

[2, 3, [[4]], 5, 6]

想法是检查元素是否为列表,然后如果结果不为空,则对元素进行递归调用remove添加它。对于普通元素(不是列表),只需添加它们即可。

答案 1 :(得分:0)

您可以对filter使用递归:

a = [2, 3, [[[[[]]]]], [[4, []]] , 5, 6, [], [], []] 
def _filter(d):
  r = [c if not isinstance(c, list) else _filter(c) for c in d if c != []]
  return list(filter(lambda x:x != [], r))

print(_filter(a))

输出:

[2, 3, [[4]], 5, 6]

答案 2 :(得分:0)

您可以使用以下代码:

a = [2, 3, [[[[[]]]]], [[4, []]] , 5, 6, [], [], []]

def filter_function(e):
    if isinstance(e, list):
        return filter(None, map(filter_function, e))
    elif e != []:
        return e

print filter_function(a)

答案 3 :(得分:-1)

您可以将以下递归函数用于列表理解:

def f(a):
    return [i for l in a for i in [f(l) if isinstance(l, list) else l] if i != []]

这样:

f([2, 3, [[[[[]]]]], [[4, []]] , 5, 6, [], [], []])

返回:

[2, 3, [[4]], 5, 6]