本博文源於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之間的所...