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

根据上面例子的输出可以看到,完美实现了要求的功能。本文仅仅演示下如何利用递归函数来解决此类问题,不对其做详细介绍。