Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Python 3.x_Recursion_Tuples - Fatal编程技术网

Python 停留在递归上

Python 停留在递归上,python,python-3.x,recursion,tuples,Python,Python 3.x,Recursion,Tuples,我正在尝试编写一个函数,它包含两个参数,一个int和一个list。我必须将列表中的每个元素与int进行比较,并将它们存储在一个元组中,元组由两个列表组成,一个列表中的数字大于,一个列表中的数字小于。我试图递归地执行此操作,但我不知道如何存储这些值,以便在使用递归时不会删除它们 def greater_less(v:int,l:list): if l == []: return ([],[]) elif l[0] > v: more = [l[0

我正在尝试编写一个函数,它包含两个参数,一个int和一个list。我必须将列表中的每个元素与int进行比较,并将它们存储在一个元组中,元组由两个列表组成,一个列表中的数字大于,一个列表中的数字小于。我试图递归地执行此操作,但我不知道如何存储这些值,以便在使用递归时不会删除它们

def greater_less(v:int,l:list):
    if l == []:
       return ([],[]) 
    elif l[0] > v:
       more = [l[0]] 
       return more + greater_less(v,l[1:])
    elif l[0] < v:
       less = [l[0]]
       return less + greater_less(v,l[1:]) 
def更大\更小(v:int,l:list):
如果l=[]:
返回([],[])
elif l[0]>v:
更多=[l[0]]
返回多+多+少(v,l[1:]
elif l[0]
问题是…当
l=[]
时,所有内容都被清除。同样,当我递归调用我的函数时,我相信之前的一切都被清除了

练习递归,以提示如何用递归解决我的问题,这将非常好

让我们编写一些代码:

def greater_less(v, l):
    # First, are we in the base case?
    if not l:
        return [], []

    # Second, do the recursive step
    smaller, greater = greater_less(v, l[1:])

    # Now, we also have l[0] to insert into these lists.
    if l[0] < v:
        smaller.insert(0, l[0])
    elif l[0] > v:
        greater.insert(0, l[0])
    else:
        pass

    # Finally, return these lists
    return smaller, greater
让我们编写一些代码:

def greater_less(v, l):
    # First, are we in the base case?
    if not l:
        return [], []

    # Second, do the recursive step
    smaller, greater = greater_less(v, l[1:])

    # Now, we also have l[0] to insert into these lists.
    if l[0] < v:
        smaller.insert(0, l[0])
    elif l[0] > v:
        greater.insert(0, l[0])
    else:
        pass

    # Finally, return these lists
    return smaller, greater

为什么是递归?是否有必要确定元素是否与可能的元素相同。为什么要递归?我不知道为什么你在if/elif/else之前做了递归步骤。我不确定有什么好的方法来解释这一点。对我来说,上面的代码比在条件语句中进行调用更清晰。也许您应该使用一个2元素列表逐步完成递归调用。因此,第一次运行它时,我们会在到达条件之前递归调用该函数。在递归调用函数后,它返回的值越来越小,然后我们再次递归调用该函数,但每次递归调用函数时,较小、较大的函数如何更新自身,而不是被清除?通常我会看到一个_+递归调用,但不是在这里。我认为您没有正确地完成函数。我试图包括一个这样做的例子,缩进表示递归。也许这会有帮助,我差点就明白了。你知道我如何颠倒元组中列表的顺序吗?简单地添加list.reverse()并不能满足我的要求,因为当我们递归调用函数时,我们不断地向列表中添加内容。我一直在尝试在最末尾反转列表顺序我有点不明白为什么在if/elif/else之前执行递归步骤我不确定有什么好的方法来解释这一点。对我来说,上面的代码比在条件语句中进行调用更清晰。也许您应该使用一个2元素列表逐步完成递归调用。因此,第一次运行它时,我们会在到达条件之前递归调用该函数。在递归调用函数后,它返回的值越来越小,然后我们再次递归调用该函数,但每次递归调用函数时,较小、较大的函数如何更新自身,而不是被清除?通常我会看到一个_+递归调用,但不是在这里。我认为您没有正确地完成函数。我试图包括一个这样做的例子,缩进表示递归。也许这会有帮助,我差点就明白了。你知道我如何颠倒元组中列表的顺序吗?简单地添加list.reverse()并不能满足我的要求,因为当我们递归调用函数时,我们不断地向列表中添加内容。我一直试图在最后颠倒列表顺序