代码之家  ›  专栏  ›  技术社区  ›  bb ef

如何使用递归从列表中删除某些内容?python

  •  1
  • bb ef  · 技术社区  · 6 年前

    我有以下练习:

    您有一个树形图作为输入,需要删除它的叶子。因此,您需要从列表列表中删除空列表。

    例如:

    [[[]、[]、[[]、[]、[]、[]、[]、[]、[]]

    变成这样: [[[],[],[]

    我尝试使用pop和del,但老师说要使用递归。此外,它还不提供任何输出。但我不知道怎么做。你能解释一下如何解决这个问题吗?

      def tree_cut(tree):
      for i in range(len(tree)):
          if tree[i]=="":
              tree.pop(i)
              return tree
              for k in tree[i]=="":
                  if k=="":
                      tree.remove(k)
                      return tree
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   fferri    6 年前

    解决方案:

    def tree_cut(tree):
        return [tree_cut(x) for x in tree if x]
    

    使用 list comprehension 迭代、过滤和转换树中的节点。

    也可以写在以下方面 map() filter() :

    def tree_cut(tree):
        return list(map(tree_cut, filter(None, tree)))
    

    这个 if x 部分 tests if the list is not empty

    >>> tree = [[[[], []], [[], []]], [[], [], []]]
    >>> tree_cut(tree)
    [[[], []], []]