我正在嘗試創建一個函式,該函式將使多維串列采用輸入數字來選擇串列的維數。到目前為止,這是我的代碼:
def createMultiDimList(dimensions, currentDim=0, output=[]):
if currentDim < dimensions:
output.append([])
currentDim = 1
createMultiDimList(dimensions, currentDim, output[0])
return output
else:
return output
我認為這不起作用,因為遞回只是放入一維串列,但我不確定。
uj5u.com熱心網友回復:
你把它復雜化了IMO。遞回背后的一般思想是首先解決最簡單的情況,然后以更容易的情況回傳更困難情況的結果。
對于這個函式,“簡單的情況”是一維串列是[]. 越來越簡單的情況是,一個n維串列是一個串列中的一個n-1維串列。因此:
>>> def n_dim_list(n: int) -> list:
... if n == 1:
... return []
... return [n_dim_list(n-1)]
...
>>> n_dim_list(4)
[[[[]]]]
如果您想讓它復雜一點以使其成為更有趣的遞回示例,您可以為一維串列定義填充值和每個串列的長度:
>>> def n_dim_list(n: int, length: int = 0, value = None) -> list:
... if n == 1:
... return [value] * length
... return [n_dim_list(n-1, length, value) for _ in range(length or 1)]
...
>>> n_dim_list(4)
[[[[]]]]
>>> n_dim_list(4, 2, 0)
[[[[0, 0], [0, 0]], [[0, 0], [0, 0]]], [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]]
uj5u.com熱心網友回復:
正如@Samwise 明智地說的那樣,您已經像他一樣簡單了很棒的方法,特別是針對您的問題,您需要發送嵌套串列而不是附加專案并回傳它:
def createMultiDimList(dimensions, currentDim=0, output=[]):
if currentDim < dimensions:
currentDim = 1
createMultiDimList(dimensions, currentDim, [output])
return output
else:
return output
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461009.html
上一篇:從給定的物件創建更新和編輯的嵌套物件(JavaScript)
下一篇:反轉串列的Python遞回函式
