演算法題 不定列表求和

2021-09-29 06:08:17 字數 768 閱讀 9755

可以看到最後的程式非常短小,執行如下:

sum_ulist([1, [2, [3, [4, 5]]]])

15

sum_ulist([1, 2, 3, 4, 5])

15

思考

還是乙個不定巢狀層數的列表,這次不進行求和,而是把其中的所有數字都取出來,最後放在乙個列表中返回。

與上面類似,不過上面的求和在每一次函式呼叫中只關注當前層級的總和即可,而這邊的遞迴需要把數字都放在同乙個列表中,可以利用預設引數的乙個特性來解決。

我們之前提到,預設引數必須設定為不可變,否則會帶來一些問題:當你呼叫此函式卻不指定預設引數的值時,它會自動使用函式第一次呼叫中預設引數的物件,如果這個物件發生了改變,可能達不到我們預期的效果。

a()

[1]

a()

[1, 1]

a()

[1, 1, 1]

通過在 else 語句後面的遞迴中不指定預設引數,我們就讓後面的函式呼叫都只操作第一次函式呼叫時初始化的 tem_li 物件了,少寫了幾個字母 ?

執行如下:

add_ulist([1, [2, [3, [4, 5]]], [6, [7, 8]]])

[1, 2, 3, 4, 5, 6, 7, 8]

演算法題 不定列表求和

在乙個巢狀了多個元素為數字或列表 列表中也是數字或列表 的列表中,求出所有數字的和。例如 1,2,3,4,5 的和為 15,1,2,3,4,5 的和也為 15。通過遍歷每乙個元素,如果發現這個元素不是列表,就把它累加,否則繼續遍歷這個元素直到找到數字。可以採用遞迴的方式來求解。def sum uli...

python函式不定引數求和

想最快的入門python嗎?請搜尋 泉小朵 來學習python最快入門教程。也可以加入我們的python學習q群 902936549,送給每一位python的小夥伴教程資料。先來看python函式定引數求和 def dup1 m n l total 0 total m n l return tota...

排序演算法(不定時更新 )

插入排序 插入排序 初始時,拿第二個和第乙個比較,如果第二個小於第乙個,兩個交換 當進行到第n次時,前面的n 1個順序應該是正確的 拿第n個和前面的n 1個數比較,如果第m個小於n,m 1大於n,則把n插到m和m 1中間 相當於將n和前乙個數比較,如果前乙個數大於n,則把前乙個移動到n的位置上,內層...