簡體   English   中英

在 python 遞歸中列出與集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM