在列表python中删除事件的递归函数
这是我用递归尾部函数来删除递归值x的一个函数,如果:在列表python中删除事件的递归函数,python,list,recursion,removeall,Python,List,Recursion,Removeall,这是我用递归尾部函数来删除递归值x的一个函数,如果: 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
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,[])
我会得到:
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]))
为什么会发生这种情况 问题出在您的
else
子句中,当您包装remove\u all0
中的返回值时,该值是一个列表,并使其成为包含该列表的列表。只需删除这些方括号,即可获得所需的结果:
[4, [5, 6, [2, 1, []]]]
给予
remove\u all0
返回一个列表,当您递归调用该列表时,您正在将其包装在另一个列表中。我认为这篇文章可能也很有趣,它展示了如何在Python中高效地从列表中删除所有出现的项。
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]