清除Python中所有无或空列表的列表或列表列表

时间:2015-05-27 16:56:40

标签: python list

我想实现一个定义,它将从列表或嵌套列表列表中删除所有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。

谢谢,

3 个答案:

答案 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']]]]]