Python 停留在递归上
我正在尝试编写一个函数,它包含两个参数,一个int和一个list。我必须将列表中的每个元素与int进行比较,并将它们存储在一个元组中,元组由两个列表组成,一个列表中的数字大于,一个列表中的数字小于。我试图递归地执行此操作,但我不知道如何存储这些值,以便在使用递归时不会删除它们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
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()并不能满足我的要求,因为当我们递归调用函数时,我们不断地向列表中添加内容。我一直试图在最后颠倒列表顺序