是python递归中的列表和集合



我运行了以下python代码:

def pr1(li):
if len(li) == 1:
print(li)
else: 
li[0] += 1
pr1(li[0:-1])
print(li)
def pr2(li, n=1):
if len(li) == 1:
print(li)
else: 
li.remove(n)
pr2(li, n+1)
print(li)
pr1([1, 2, 3, 4, 5])
pr2({1, 2, 3, 4, 5})

,我得到了输出:

[5]
[5, 2]
[4, 2, 3]
[3, 2, 3, 4]
[2, 2, 3, 4, 5]
{5}
{5}
{5}
{5}
{5}

似乎递归在列表上创建了一个新的实例,而递归在集合上却没有,这很奇怪。有人能解释一下吗?

您的pr1函数将列表的副本传递给下一级递归,但您的pr2函数将修改后的集合传递下来。这允许pr2函数在递归中弄乱集合的内容,并且当从较低级别返回时,您最终只打印集合的最后一个内容。

尝试调用pr2(set(li),n+1)以避免此干扰

最新更新