一、问题描述
已有多级嵌套数组 : [1, [2, [3, [4, 5]]], 6] 将其扁平化处理,输出: [1,2,3,4,5,6]
二、详细描述
题目表示对于一个多维的数组,需要构建一个方法,将其直接转化为一个一维数组的输出
三、解法思路
(一)递归
1.思路
查看题目的表述就可发现,其实数组中的每一个元素都是整数或者新的数组,这种结构相似的重复判断,我第一时间想到的就是递归解法。
遍历数组,若当前元素为整数,则不需要做处理,直接放入结果,若当前元素为数组,则递归调用自身函数,将当前数组传入,且把返回值加入到结果列表中。很容易得到以下代码。
2.源码
l1 = [1, [2, [3, [4, 5]]], 6]
def myflat(arr):
res = list()
for i in arr:
if isinstance(i, list):
res.extend(myflat(i))
else:
res.append(i)
return res
print(myflat(l1))
四、进阶
在原方法的基础上,增加指定深度的参数,实现扁平参数控制,如
对于数组arr = [1, [2, [3, [4, 5]]], 6],已有扁平函数myflat().
实现
输入:myflat(arr,1),输出: [1, 2, [3, [4, 5]], 6]
输入:myflat(arr,2),输出: [1, 2, 3, [4, 5], 6]
思路:
使用3.1的递归解法,只需要多加一个控制参数,当参数不为0时,不断递归来控制该函数的执行即可,很容易得到以下代码
源码:
l1 = [1, [2, [3, [4, 5]]], 6]
def myflat_dep(arr, depth=1):
res = list()
for i in arr:
if isinstance(i, list) and depth > 0:
res.extend(myflat_dep(i, depth - 1))
else:
res.append(i)
return res
print(myflat_dep(l1, 2))
标签:flat,arr,递归,res,l1,ES6.0,数组,myflat,手写
From: https://www.cnblogs.com/chiyun/p/17653616.html