深度移除的递归不会经过匹配



因此,对于深度移除,可以为您提供一个链表和一个值。如果在该列表中找到一个值,则删除并继续,直到删除所有与参数值匹配的值为止。尽管我的程序一旦找到匹配项就停止了。

应该发生什么的示例

removedeep(3, [1, 2, 3, 4])   --> [1, 2, 4]
removedeep(3, [1, [2, 3], 4]) --> [1, [2], 4]
removedeep(3, [1, 2, 4]) --> [1, 2, 4]
removedeep(3,  --> [1, [2], 4]

def removedeep(x, L):
'''test if x occurs within the nested list L.
E.g., removedeep(3, [1, 2, 3, 4])   --> [1, 2, 4]
removedeep(3, [1, [2, 3], 4]) --> [1, [2], 4]
removedeep(3, [1, 2, 4]) --> [1, 2, 4]
removedeep(3,  --> [1, [2], 4]'''
if not L:
return []
elif type(L[0]) == type(x):
if(L[0] == x):
return removedeep(x, L[1:])
else:
return [L[0]] + removedeep(x, L[1:])
else:
return removedeep(x, L[0])
print(removedeep(4,[1,2,[4],3,5,6]))

虽然我的输出是[1,2]而不是[1,2,3,5,6]

遇到嵌套数组时,调用

else:
return removedeep(x, L[0])

这会忽略它之后的任何值,因此在给定4,[1,2,[4],3,5,6])等输入的情况下,您可以点击[4]并调用removedeep(x, [4]),但无法访问数组的3, 5, 6部分。不知怎么的,你需要包括这些。快速肮脏的方法是添加:

else:
return removedeep(x, L[0]) + removedeep(x, L[1:])

这样一来:

> print(removedeep(4,[1,2,[4, [90, 4],9],3,[4,5,6]]))
[1, 2, 90, 9, 3, 5, 6]

看看这个分支:

#...
else:
return removedeep(x, L[0])

L[1:]怎么样
考虑您的例子,当您进入这个分支时,您的L现在是[[4],3,5,6],但您只返回removedeep(4,[4])

**编辑版本:

else:
# if you always remove a single element from a list 
return [removedeep(x, L[0])] + removedeep(x, L[1:])

相关内容

  • 没有找到相关文章

最新更新