Python的列表很強大也很靈活,如何運用好列表就是一門大學問啦!在列表中經常見到下面這種形式:
list1=['aa',['bb',['cc',['dd','ee']]],'ff']
如果使用for迴圈迭代輸出列表中的每個元素會得到下面的結果:
>>> list1=['aa',['bb',['cc',['dd','ee']]],'ff'] >>> for i in list1: ... print(i) ... aa ['bb', ['cc', ['dd', 'ee']]] ff
可以看到,列表中巢狀的列表被整個當成一個元素輸出了出來,那麼該怎樣做才能將巢狀的列表中的每個元素單獨輸出出來呢?
先看一下常規的實現方法——for迴圈巢狀。
>>> list1=['aa',['bb',['cc',['dd','ee']]],'ff'] >>> for i in list1: ... if isinstance(i,list): ... for a in i: ... print(a) ... else: ... print(i) ... aa bb ['cc', ['dd', 'ee']] ff
上面的例子中可以看到,使用for迴圈巢狀一層之後列表中的第一層巢狀的列表中的每個元素成功被輸出出來了,但是第二層、第三層巢狀的列表中的每個元素依舊沒有被依次輸出。
這時候就需要用到for迴圈的多層巢狀了,但多層巢狀的for迴圈不僅寫起來繁瑣,讀起來更要命。有沒有其他更好的解決方法呢?當然有的——利用遞迴函式來輕鬆實現!
>>> list1=['aa',['bb',['cc',['dd','ee']]],'ff'] >>> def iteration(a): ... for b in a: ... if isinstance(b,list): ... iteration(b) ... else: ... print(b) ... >>> iteration(list1) aa bb cc dd ee ff
根據上面例子的輸出可以看到,完美實現了要求的功能。本文僅僅演示下如何利用遞迴函式來解決此類問題,不對其做詳細介紹。