python遞迴生成式解包遍歷巢狀列表

2021-10-07 20:58:53 字數 1592 閱讀 7716

本博文源於python基礎,主要**遞迴生成式的妙用。巢狀列表在python描述樹形結構時經常用到,做到對巢狀列表遍歷是一件存在方法技巧的事情,因此我們今天就來實現一二。

最重要雙for迴圈中內迴圈呼叫本身基線遞迴

def

flattern

(nested)

:try

:for sublist in nested:

for elememt in flattern(sublist)

:yield elememt

except typeerror:

yield nested

if __name__ ==

'__main__'

: lst1 =[[

[1],

2],3

,4,5

,[6,

[7]]

,8]print

("原始列表....."

)print

(lst1)

print

('巢狀遍歷之後.....'

) lst2 =

list

(flattern(lst1)

)print

(lst2)

上面的效果是適應與數字版本,但如果遇到字元呢,讀過上面原始碼的小夥伴知道,這絕對崩了,比如

已經泛紅一片

為了處理這個,修改**,增加異常處理即可。

def

flattern

(nested)

: result =

try:

try:nested +

''except typeerror:

pass

else

:raise typeerror

for sublist in nested:

for elememt in flattern(sublist)

:yield elememt

except typeerror:

yield nested

if __name__ ==

'__main__'

: lst1 =[[

["dfasfa"],

2],3

,4,5

,[6,

[7]]

,8]print

("原始列表....."

)print

(lst1)

print

('巢狀遍歷之後.....'

python 生成器 推導式 遞迴

目錄3 遞迴 判斷乙個函式是否是生成器函式 只需看函式內部是否有yield 生成器函式 內部是否包含yield def func print f1 yield 1 print f2 yield 2 print f3 yield 100 print f4 只要有yield 函式內部 不會執行,返回乙個...

匿名函式 列表生成式 字典生成式 遞迴

語法 語法格式為 lambda 引數1,引數2,引數 引數可以省略 邏輯表示式 即結果,不可省略 引數的範圍 可省略 lambda 引數 結果 lambda x,y x y 函式輸入是x和y,輸出是它們的積x y lambda none 函式沒有輸入引數,輸出是none lambda args su...

python 列表生成式,字典生成式

生成乙個列表,列表元素分別為 1 1,2 2.9 9 import math li for i in range 1,10 print li print i i for i in range 1,10 print i i for i in range 1,10 if i 2 0 找出1 10之間的所...