【发布时间】:2018-01-09 09:40:48
【问题描述】:
需要编写一个递归函数来删除列表的元素,但将数组保留在结果中,例如。
def remove_words(listx):
for element in listx:
if isinstance(element, list):
remove_words(element)
else:
listx.remove(element)
return listx
remove_words(["a", "b", ["c"]]) 将返回 [[]]
我的代码由于某种原因返回 ["b",[]],它缺少一个元素。
【问题讨论】:
-
您在迭代时删除了
list的元素。不要不要那样做。您删除第一个元素,当索引继续移动时,新的第二个元素是以前的第三个元素......找到一种方法来避免这种情况! -
您在迭代时从列表中删除元素,因此只需在函数内创建列表副本并返回该列表
-
您想要就地修改您的列表,还是可以创建一个新列表?
-
你能提供一个使用这个逻辑的代码示例吗? @tobias_k 没关系,只需要返回正确的嵌套列表即可。
-
为什么要指定递归解决方案?将迭代方法 (for) 与递归混合是很奇怪的。如果你想要一个递归的解决方案,这不是一个很好的开始。
标签: python recursion tail-recursion