Python 递归实现多层嵌套列表转为单层列表

多层嵌套列表通过递归,转化为单层列表,代码如下:

l=[[3,5,8],10,[[13,14],15],18]

def print_list(lst,lis=[]):

    for x in lst:
        if type(x) is list:
            print_list(x)

        else:
            lis.append(x)
    return lis
print(print_list(l))

当你打印出符合预期的结果后,有没有一丝蒙圈,为什么会打印出一个简单的列表?

这是因为函数中有一个默认值为列表的参数造成的

现举例说明一下:

def get_list(x,lis=[]):
    for i in range(x):
        lis.append(i)
    return lis
print(get_list(4))
print(get_list(5))
预想的结果:
[1,2,3]
[1,2,3,4]
实际结果:
[1,2,3]
[1,2,3,1,2,3,4]

 

 

当定义函数时,函数的默认参数为可变对象,如:列表,字典,现在已列表为例;

在每次调用的时候如果传递了新的列表,则使用传递的列表,没有传递,使用定义函数时保存的默认参数(lis=[]);

上面两次调用中,都没有传递新的列表(使用默认列表 lis=[] ),程序会调用定义函数时保存的默认参数((lis=[]));

列表在append的时候会在 lis=[] 原来的基础上append追加值,所以会产生以上结果.

在函数中添加print(id(lis)),通过打印列表的ID可以看出,函数执行两次的列表ID是一样的

这下可以明白了吗?

 

 


版权声明:本文为Shen1105原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。