首页 > 解决方案 > 如何通过递归从列表中删除某些内容?Python

问题描述

我有这个练习:

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

例如这个:

[[[[], []], [[], []]], [[], [], []]]

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

我试过用pop和del,但是老师说要用recursion。它还给出 None 作为输出。但我不知道该怎么做。你能解释一下如何或你能帮助解决这个问题吗?

  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

标签: pythontree

解决方案


解决方案:

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

使用列表推导来迭代、过滤和转换树中的节点。

也可以写成map()filter()

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

if x部分测试列表是否不为空

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

推荐阅读