手写ES6.0-flat()

发布时间 2023-08-24 10:51:53作者: 王寄鱼

一、问题描述

已有多级嵌套数组 : [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))