Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除所有空嵌套列表_Python_Nested Lists - Fatal编程技术网

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)))