def remove_all1(x,s):
def loop(x,s,ss):
while s!=[]:
if x == s[0]:
return loop(x,s[2:],ss+[s[1]])
else:
return loop(x,s[1:],ss+[s[0]])
return ss
return loop(x,s,[])
这是我通过递归尾函数删除递归值x和if:
print(remove_all1(3,[4,3,5,6,3,2,1]))
我会得到:
[4,5,6,2,1]
我想要的确切结果。但是对于这里的递归函数:
def remove_all0(x,s):
while s!=[]:
if x == s[0]:
ss = [s[1]] + remove_all0(x,s[2:])
return ss
else:
s1 = [s[0]] + [remove_all0(x, s[1:])]
return s1
if s==[]:
return s
print(remove_all0(3,[4,3,5,6,3,2,1]))
我不会得到相同的结果。相反,我得到了:
[4, [5, 6, [2, 1, []]]]
为什么会这样?
答案 0 :(得分:2)
问题出在else
子句中,当您从列表中remove_all0
包装返回的值时,将其作为包含该列表的列表。只需删除这些方括号,您就可以获得所需的结果:
def remove_all0(x,s):
while s!=[]:
if x == s[0]:
ss = [s[1]] + remove_all0(x,s[2:])
return ss
else:
s1 = [s[0]] + remove_all0(x, s[1:])
return s1
if s==[]:
return s
print(remove_all0(3,[4,3,5,6,3,2,1]))
给出
[4, 5, 6, 2, 1]