[問題] for 迴圈的用法

看板Python作者 (fannx)時間10年前 (2015/07/08 16:46), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
movies = ["a1","a2","a3",["b1","b2",["c1"]]] for a in movies: if isinstance(a, list): for b in a: print(b) else: print(a) 小弟不才請教一下 a1 a2 a3 b1 b2 ['c1'] 為什麼,會印出a1,a2,a3......這種個別單一資料 到了['c1'] 卻變成完整的 清單內容 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.255.80 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1436345197.A.153.html

07/08 17:01, , 1F
因為你的 isinstance 判斷只有套用在 movies
07/08 17:01, 1F

07/08 17:01, , 2F
而 movies 裡面的 list 你沒有再做這個判斷
07/08 17:01, 2F

07/08 18:42, , 3F
但為什麼到了c3就變成完整式了
07/08 18:42, 3F

07/08 19:15, , 4F
因為 ['c1'] 在第二層迴圈時,你沒有第三層迴圈去印它
07/08 19:15, 4F

07/08 19:15, , 5F
不考慮 stack 會炸掉,這個用遞迴簡單寫一下就可以了
07/08 19:15, 5F

07/08 19:15, , 6F
movies = ["a1","a2","a3",["b1","b2",["c1"]]]
07/08 19:15, 6F

07/08 19:15, , 7F
def foobar(m):
07/08 19:15, 7F

07/08 19:15, , 8F
for i in m:
07/08 19:15, 8F

07/08 19:16, , 9F
if isinstance(i, list): foobar(i)
07/08 19:16, 9F

07/08 19:16, , 10F
else: print i
07/08 19:16, 10F

07/08 19:16, , 11F
foobar(movies)
07/08 19:16, 11F
文章代碼(AID): #1LdEDj5J (Python)
文章代碼(AID): #1LdEDj5J (Python)