删除列表python中出现的递归函数

时间:2015-10-11 12:20:28

标签: python list recursion removeall

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, []]]]

为什么会这样?

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]