我想实现一个定义,它将从列表或嵌套列表列表中删除所有None对象。
示例:
_list = [0,0,1,None,12, ""]
返回:
_result = [0,0,1,12,""]
或者,如果输入是列表的嵌套列表:
示例:
_list = [[1,2,None],[2,3,None,2],[2,3,None,None,""],[None,None,None]]
返回:
_result = [[1,2],[2,3,2],[2,3,""]]
当然我不确定传入的结构是什么(列表深度)或者其中一些是否包含所有None值(在这种情况下我也想删除空列表)。
我确实在这里看到了一些例子,但它们都是列表理解或迭代示例,并且没有一个能够处理更深层的列表。所有帮助将不胜感激。 我在IronPython 2.7。
谢谢,
答案 0 :(得分:3)
这个简单的递归函数将清除None
s的嵌套列表以及空列表(最初或由于删除了None
):
def clear_list(l):
out = []
for ll in l:
if ll is None:
continue
if isinstance(ll, list):
ll = clear_list(ll)
if not ll:
continue
out.append(ll)
return out
答案 1 :(得分:1)
def remove_None(_list):
while None in _list:
_list.remove(None)
for element in _list:
if isinstance(element, list):
remove_None(element)
我希望这可以帮到你!
答案 2 :(得分:0)
您可以使用使用列表推导的递归函数来执行此操作:
def clean_list(a_list):
return [obj for obj in [clean_list(obj) if isinstance(obj, list) else obj
for obj in a_list if obj is not None] if obj != []]
_list1 = [0,0,1,None,12, ""]
print(clean_list(_list1))
_list2 = [[1,2,None],[2,3,None,2],[2,3,None,None,""],[None,None,None]]
print(clean_list(_list2))
_list3 = [[1,2,None],[2,3,[4,None,"",5],6],[7,[[[8,[None],"test"],None]]]]
print(clean_list(_list3))
输出:
[0, 0, 1, 12, '']
[[1, 2], [2, 3, 2], [2, 3, '']]
[[1, 2], [2, 3, [4, '', 5], 6], [7, [[[8, 'test']]]]]