【问题标题】:Remove invalid entries in nested list [duplicate]删除嵌套列表中的无效条目[重复]
【发布时间】:2021-08-20 02:01:10
【问题描述】:

我还是个初学者,想不出破解这个难题的好方法。

我有一个任意深度的嵌套列表。类似的东西:

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

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

我怀疑递归之类的东西,但我从未创建过这样做的函数,也找不到适合我需要的在线示例。我的尝试完全无效。

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

【问题讨论】:

    标签: python list


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      你可以使用递归:

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

      【讨论】:

      • 这只考虑None'',如果出现[None]之类的东西,它会从列表中删除None,但保留空列表。例如:rem_vals([1, [None], 3]) -> [1, [], 3]
      • @RafaelSetton OP 仅指定 None'' 作为过滤条件。简单地检查值的真实性 if not i 不是很彻底,因为它还会删除 0 和任何其他真实性评估为 False 的对象
      • 在这种情况下,您过滤的方式是正确的,但正如我之前指出的那样,空列表仍将保留
      • @RafaelSetton,这是 OP 要求的。
      猜你喜欢
      • 2018-09-15
      • 2020-12-21
      • 1970-01-01
      • 2016-10-19
      • 2015-07-25
      • 2019-12-10
      • 2018-02-18
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多