Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Python 3.x_List - Fatal编程技术网

Python 从列表中删除嵌套的空列表

Python 从列表中删除嵌套的空列表,python,python-3.x,list,Python,Python 3.x,List,我是Python新手,想问这个问题。我有一个列表,里面有很多类型,比如int、list、empty list、float、string,我想创建一个选项,根据选择删除任何类型,所以可能我想删除列表中的所有int或所有字符串。但棘手的是,如果我有如下输入: [["hello", []], 1, 2.0, [], "hi"] 我想删除空列表,我希望这是输出: [["hello"], 1, 2.0, "hi"] 请帮帮我,因为我正在绞尽脑汁解决这个问题。简单递归方法 input = [["h

我是Python新手,想问这个问题。我有一个列表,里面有很多类型,比如int、list、empty list、float、string,我想创建一个选项,根据选择删除任何类型,所以可能我想删除列表中的所有int或所有字符串。但棘手的是,如果我有如下输入:

 [["hello", []], 1, 2.0, [], "hi"] 
我想删除空列表,我希望这是输出:

 [["hello"], 1, 2.0, "hi"]

请帮帮我,因为我正在绞尽脑汁解决这个问题。

简单递归方法

input = [["hello", []], 1, 2.0, [], "bonjour"]

def removeEmpty(input):
    ans = []
    for i in input:
        if isinstance(i, list):
            if i == []:
                continue
            else:
                ans.append(removeEmpty(i))
        else:
            ans.append(i)
    return ans

print(removeEmpty(input))

现有代码的问题在于它没有考虑嵌套列表

下面是一个递归解决方案:

def eliminate_empty_lists(_list):
    if isinstance(_list, list):
        return [l for l in map(eliminate_empty_lists, _list) if l != []]

    return _list
并且输出与所需的相同:

example_list = [["hello", []], 1, 2.0, [], "bonjour"]
print(eliminate_empty_lists(example_list))

>>> [["hello"], 1, 2.0, "bonjour"]

你有没有试过自己编写代码来解决这个问题?@giorgosmyriantous我想删除我的问题try,提供一个你尝试过的例子。Giorgos Myrianthous的解决方案应该有效。您应该将他的答案标记为正确。isinstance用于检查i的类型,如果它是一个列表,我们需要将其作为空列表跳过,或者递归到其中以检查是否存在内部空列表为什么此答案被否决?如果OP每5分钟改变一次他的问题,那不是我的错。