[英]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 並且y
是None
,而不是[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.