3 回答

TA貢獻1854條經驗 獲得超8個贊
如果想法是在不修改原件的情況下返回副本,我不建議使用可變默認參數。
反而,
def double(lst):
if not lst:
return []
return [2*lst[0], *double(lst[1:])] # [2*lst[0]] + double(lst[1:])
遞歸案例必須返回一個新列表,基本案例將檢查并返回一個空列表。
lst1 = double([1,2,3,4,5,6,7,8])
print(lst1)
[2, 4, 6, 8, 10, 12, 14, 16]
如果你想找點樂子,你可以嘗試使用yield from(生成器委托)基于生成器的遞歸解決方案:
def double(lst):
if lst:
yield 2*lst[0]
yield from double(lst[1:])
lst = list(double([1,2,3,4,5,6,7,8]) )
print(lst)
[2, 4, 6, 8, 10, 12, 14, 16]

TA貢獻1806條經驗 獲得超8個贊
如果您不想使用 append()。然后你可以使用這個解決方案:
def double(lst, lst_ = []):
if not lst:
return lst_
else:
return [lst[0] * 2 , *double(lst[1:])]
print(double([1,2,3,4,5,6,7,8]))
輸出將是: [2, 4, 6, 8, 10, 12, 14, 16]
以防萬一您對 *double(lst[1:]) 調用感到疑惑: *[] 用于解包參數列表。在這里閱讀更多。 如果您在沒有 * 的情況下調用,您將得到如下輸出:
[2, [4, [6, [8, [10, [12, [14, [16, []]]]]]]]]
另一個簡單的解決方案是:
def double(lst, lst_ = []):
if not lst:
return lst_
else:
lst[0] = lst[0] * 2
lst_ = lst_.append(lst[0])
return double(lst[1:])
print(double([1,2,3,4,5,6,7,8]))

TA貢獻1831條經驗 獲得超9個贊
使用.append()on list 在末尾添加元素:
def double(lst, lst_ = []):
"""
parameters : lst of type list;
returns : another list with lst's elements doubled
"""
if len(lst) == 0:
return lst_
else:
lst[0] += lst[0]
lst_.append(lst[0])
return double(lst[1:])
print(double([1,2,3,4,5,6,7,8]))
# [2, 4, 6, 8, 10, 12, 14, 16]
另外,請注意,lst[0] = int(lst[0]) + int(lst[0])您代碼中的這一行可以縮短為lst[0] += lst[0],因為您只處理整數并且顯式轉換是多余的。
添加回答
舉報