无论嵌套多深,我都必须从列表中删除空列表
示例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]
我不知道如何在列表中的嵌套项目中循环。项目也可以嵌套,但是我的功能仍然可以正常工作。
答案 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]