[英]lists vs sets in python recursion
我運行了以下 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})
我得到了 output:
[5]
[5, 2]
[4, 2, 3]
[3, 2, 3, 4]
[2, 2, 3, 4, 5]
{5}
{5}
{5}
{5}
{5}
似乎遞歸列表會創建一個新實例,而遞歸集則不會,這很奇怪。 誰能解釋一下?
您的pr1
function 將列表的副本傳遞到下一個遞歸級別,但您的pr2
function 將修改后的集合傳遞下來。 這允許pr2
function 在遞歸中弄亂集合的內容,並且當從較低級別返回時,您最終只打印集合的最后內容。
嘗試調用pr2(set(li),n+1)
來避免這種干擾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.