簡體   English   中英

使用遞歸的列表列表

[英]List of lists using recursion

我一直在嘗試一些在線學習,我已經被困了一段時間。

我需要使用遞歸創建一個空列表列表。

奇怪的是,我認為我理解階乘算法(有很多幫助),但不是這樣,因此它總是只返回單個 []。

例如,如果n=4那么我會期望[[ ], [ ], [ ] ,[ ]]

def listOfLists(n):

    lists = []

        if i <= 1:
            return lists
        else:
            lists += lists.append([])
            listOfLists(n-1)

您不使用遞歸調用的響應,請嘗試理解此代碼(我已嘗試使表單與您的相似):

def listOfLists(n):
    lists = [[]]
    if n <= 1:
        return lists
    else:
        return lists + listOfLists(n-1)

這個書面的“試運行”可以幫助你理解它(對於listOfLists(3) ):

Call - listOfLists(3)
 Call - listOfLists(2)
  Call - listOfLists(1)
  Return [[]] # From listOfLists(1)
 Return [[]] + [[]] # From listOfLists(2)
Return [[]] + [[],[]] # From listOfLists(3)

遞歸函數已經在其他答案中給出,我想解釋為什么你的代碼沒有按預期工作。 罪魁禍首是那一行:

lists += lists.append([])

相反,它應該是:

lists.append([])

或者:

lists = lists+[[]]

請注意, .append方法在list末尾添加元素並return s None ,請考慮以下示例:

x = [1,2,3]
y = x.append(4)
print(y) #None
print(x) #[1, 2, 3, 4]

正如您可能看到的append方法改變了x list 並且yNone ,而不是[1,2,3,4] 盡管如此,您的功能,即使經過描述的修復也不會是遞歸功能。

供您考慮的另一個變體。 這使用具有默認值的附加參數。

def listOfLists(n, lists = []):
    if n > 0:
        lists.append([])
        return listOfLists(n-1, lists)
    else:
        return lists

print(listOfLists(4))

如果您必須使用遞歸來解決更適合重復的問題,您可以這樣做。 我已經盡可能地接近你的原作。

def listOfLists(n):
    if n <= 0:
        return []
    else:
        return [ [] ] + listOfLists(n-1)

>>> listOfLists(4)
[[], [], [], []]
def listOfLists(n,lists=[]):
    lists.append([])
    if n == 1:   
        return

    listOfLists(n-1,lists)
    return lists

print (listOfLists(4))

結果: [[], [], [], []]

發布了很好的遞歸答案,但是,也可以使用帶有遞歸的生成器:

def listOfLists(n):
   if n:
     yield []
     yield from listOfLists(n-1)

print(list(listOfLists(4)))

輸出:

[[], [], [], []]

你可以這樣做 :

def listoflist_func(n, currentList=[]):
    if n < 0:
        return "Error: n must be > 0"
    elif n==0:
        return currentList
    else:
        currentList.append([])
        return listoflist_func(n-1, currentList)


print listoflist_func(4)

結果是:

[[], [], [], []]

最好的事物

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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