Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_List - Fatal编程技术网

Python 删除嵌套列表中的无效项

Python 删除嵌套列表中的无效项,python,list,Python,List,我还是个初学者,我想不出一个好办法来解决这个问题 我有一个任意深度的嵌套列表。比如: sample=[[1,2',[None,5],[6]]],None] 我需要循环浏览列表的每个级别,删除任何空字符串或无字符串的条目。除此之外,嵌套列表应该保持不变 我怀疑递归之类的东西,但我从来没有创建过这样的函数,也没有在网上找到一个适合我需要的好例子。我的尝试完全无效 任何帮助都将不胜感激,因为我甚至有点不知道如何开始。您可以使用递归: sample = [[1, [2, '', [None, 5], [

我还是个初学者,我想不出一个好办法来解决这个问题

我有一个任意深度的嵌套列表。比如:

sample=[[1,2',[None,5],[6]]],None]

我需要循环浏览列表的每个级别,删除任何空字符串或无字符串的条目。除此之外,嵌套列表应该保持不变

我怀疑递归之类的东西,但我从来没有创建过这样的函数,也没有在网上找到一个适合我需要的好例子。我的尝试完全无效

任何帮助都将不胜感激,因为我甚至有点不知道如何开始。

您可以使用递归:

sample = [[1, [2, '', [None, 5], [6]]], None] 
def rem_vals(r):
   return [rem_vals(i) if isinstance(i, list) else i for i in r if i not in [None, '']]

print(rem_vals(sample))
输出:

[[1, [2, [5], [6]]]]
def filter_null(l):
l=l.copy()
i=0
而我
这只考虑
None
'
,而且如果出现类似
[None]
的内容,它将从列表中删除
None
,但保留空列表。e、 g.:
rem\u vals([1,[None],3])
->
[1,[],3]
@RafaelSetton OP仅指定
None
'
作为筛选标准。简单地检查值的真实性
如果不是i
就不是很彻底,因为它也会删除
0
以及真实性评估为
False
的任何其他对象。在这种情况下,您过滤的方式是正确的,但空列表仍将保留,正如我指出的那样earlier@RafaelSetton,这是OP要求的。
def filter_null(l):
    l = l.copy()
    i = 0
    while i < len(l):
        if isinstance(l[i], list):
            l[i]= filter_null(item) # this is the recursion
        if not item: # Checks if item evaluates to False or None
            l.pop(i)
            i -= 1 # If you delete this line the following item will be skipped
        i += 1