亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用遞歸時,列表不會添加任何新元素

使用遞歸時,列表不會添加任何新元素

慕婉清6462132 2021-08-14 19:31:16
我被要求定義一個函數,該函數接受一個列表并返回另一個列表,同時使用遞歸。但是,當我運行 else 命令并打印 時lst_,輸出顯示每次運行時,列表都包含一個元素,而不是一個一個地添加雙打。另外,我盡量不使用append()Thoughts?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] = int(lst[0]) + int(lst[0])        lst_ = lst_ + lst[0:1]                    print(lst_)        return double(lst[1:])print(double([1,2,3,4,5,6,7,8]))這是輸出[2][4][6][8][10][12][14][16][]
查看完整描述

3 回答

?
嗶嗶one

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]


查看完整回答
反對 回復 2021-08-14
?
慕森卡

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]))


查看完整回答
反對 回復 2021-08-14
?
天涯盡頭無女友

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],因為您只處理整數并且顯式轉換是多余的。


查看完整回答
反對 回復 2021-08-14
  • 3 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號