Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在列表python中删除事件的递归函数_Python_List_Recursion_Removeall - Fatal编程技术网

在列表python中删除事件的递归函数

在列表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

这是我用递归尾部函数来删除递归值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
    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]