Python 删除所有空嵌套列表
如何从该列表中删除:Python 删除所有空嵌套列表,python,nested-lists,Python,Nested Lists,如何从该列表中删除: list = [ [], ['', 'subitem'], [[]], 'item', [ 'item', 'item', [''], [] ], [] ] 我可以得到这个: list = [ ['subitem'], 'item', [ 'item', 'item' ] ] 如何递归删除
list = [
[],
['', 'subitem'],
[[]],
'item',
[
'item',
'item',
[''],
[]
],
[]
]
我可以得到这个:
list = [
['subitem'],
'item',
[
'item',
'item'
]
]
如何递归删除所有空嵌套列表、零字符串和具有嵌套零字符串的列表
def purify(l):
for (i, sl) in enumerate(l):
if type(sl) == list:
l[i] = purify(sl)
return [i for i in l if i != [] and i != '']
l1 = [ [], ['', 'subitem'], [[]], 'item', [ 'item', 'item', [''], [] ], [] ]
print purify(l1)
印刷品:
递归:
def remove_lst(lst):
if not isinstance(lst, list):
return lst
else:
return [x for x in map(remove_lst, lst) if (x != [] and x != '')]
也许是这样的
#!/usr/local/cpython-3.3/bin/python
'''Demonstrate a way of removing empty lists and empty strings from a nested list'''
import pprint
def remove_empty_recursive(input_obj):
'''Remove empty lists and strings - worker function'''
if isinstance(input_obj, str):
if input_obj:
# it's a nonempty string, pass it through
return input_obj
else:
# string is empty, delete it
return None
elif isinstance(input_obj, list):
if input_obj:
new_obj = []
for element in input_obj:
subresult = remove_empty_recursive(element)
if subresult is None:
pass
else:
new_obj.append(subresult)
if new_obj:
return new_obj
else:
return None
else:
return None
def remove_empty(list_):
'''Remove empty lists and strings - user callable portion'''
result = remove_empty_recursive(list_)
return result
def for_comparison():
'''Show what the O.P. wanted, for comparison's sake'''
list_ = [
['subitem'],
'item',
[
'item',
'item'
]
]
return pprint.pformat(list_)
def main():
'''Main function'''
list_ = [
[],
['', 'subitem'],
[[]],
'item',
[
'item',
'item',
[''],
[]
],
[]
]
result = remove_empty(list_)
print('actual result:')
pprint.pprint(result)
print('desired result:')
print(for_comparison())
main()
如果不完全是这样,您可能想分享一个更详细的例子,说明此操作失败。一行程序:
def remove_empty(l):
return tuple(filter(lambda x:not isinstance(x, (str, list, tuple)) or x, (remove_empty(x) if isinstance(x, (tuple, list)) else x for x in l)))
你能告诉我们你试过什么吗?什么不起作用?如果列表只是
[]
?我们是否应该尝试以某种方式删除顶级列表?不要将您的列表命名为“列表”这也会删除零和非,尝试使用l1=[[],0,无]
看起来很漂亮,但我做错了什么?:>>block=[1,2,[],[],[''[12]],'sd']>>def remove\u empty\u嵌套列表(root\u列表):如果不存在(root\u列表,列表):return root_list else:return[x代表映射中的x(删除_empty_nested_list,root_list)if(root_list!=[]和root_list!='')>>remove_empty_nested_list(block)[1,2,[],['',[12],'sd']@dmitrylogvineko您复制时出错<代码>根目录列表!=[]是一个错误的比较。哦,糟糕!我还有一个缺点:它不适用于Python 2.6
def remove_empty(l):
return tuple(filter(lambda x:not isinstance(x, (str, list, tuple)) or x, (remove_empty(x) if isinstance(x, (tuple, list)) else x for x in l)))