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