Python小程式-迭代輸出多層巢狀列表中的每個元素並顯示巢狀列表的層次結構

程式程式碼:

def iteration(list_name,indent = False,level = 0):
    '''此函式的作用是迭代輸出一個列表及其中的巢狀列表中的每個元素。
    其包含三個引數,第一個引數是要傳入的列表的名稱,第二個引數是控
    制是否使用縮排來顯示列表中的巢狀的層次結構,第三個引數是控制輸
    出時是否首行縮排,其數值就是使用Tab縮排的次數'''
    for i in list_name:
        if isinstance(i,list):
            iteration(i,indent,level + 1) #利用遞迴函式處理巢狀列表
        else:
            if indent:
                print('\t' * level,end='')
            print(i)
list1=['aa',['bb',['cc',['dd','ee']]],'ff'] #定義一個待處理的多層巢狀列表
iteration(list1,True,0) #呼叫iteration函式對其處理

程式輸出:

aa
    bb
        cc
            dd
            ee
ff

Python利用遞迴函式迭代輸出多層巢狀列表中的每個元素

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

根據上面例子的輸出可以看到,完美實現了要求的功能。本文僅僅演示下如何利用遞迴函式來解決此類問題,不對其做詳細介紹。