首页 > 其他分享 >手写ES6.0-flat()

手写ES6.0-flat()

时间:2023-08-24 10:55:45浏览次数:35  
标签:flat arr 递归 res l1 ES6.0 数组 myflat 手写

一、问题描述

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

相关文章

  • java笔试手写算法面试题大全含答案
    1.统计一篇英文文章单词个数。publicclassWordCounting{publicstaticvoidmain(String[]args){try(FileReaderfr=newFileReader("a.txt")){intcounter=0;booleanstate=false;intcurrentChar;while((currentChar=fr.read())!=-1){if(currentChar=='......
  • java笔试手写算法面试题大全含答案
    1.统计一篇英文文章单词个数。publicclassWordCounting{publicstaticvoidmain(String[]args){try(FileReaderfr=newFileReader("a.txt")){intcounter=0;booleanstate=false;intcurrentChar;while((currentChar=fr.read())!=-1){if(currentChar==�......
  • 手写Promise
    1.promise是手写异步代码的另一种方式,主要用于解决回调嵌套问题2.promise提供两个参数resolve(成功时调用的函数),reject(失败时调用的参数),它们是promise内部实现好的函数3.promise有三种状态,pending等待,fulfilled成功,rejected失败4.resolve时,将promise的状态从pending改为fulfi......
  • Html+JavaScript实现手写签名
    前言Hello各位,本葡萄又来啦,今天遇到的场景是这样的:在日常业务流程中,经常需要某一流程环节中相关责任人员进行审批签字,早期许多公司为了省事就直接会把这位负责人的签名以键盘打字(楷体)的形式打印出来,但是这样的坏处就是会导致所有的负责人的签名都是一样的,没有美感,为了解决这个问......
  • 基于LeNet网络的MNIST手写数字训练和识别matlab仿真
    1.算法理论概述      基于LeNet网络的MNIST手写数字训练和识别的实现步骤。首先,我们将介绍MNIST数据集的基本信息和LeNet网络的结构及其原理。然后,我们将详细说明数据预处理、LeNet网络的实现过程和训练过程。最后,我们将展示如何使用训练好的LeNet网络对手写数字进行识别,......
  • 手写raft(二) 实现日志复制
    1.Raft日志复制介绍在上一篇博客中MyRaft实现了leader选举,为接下来实现日志复制功能打下了基础:手写raft(一)实现leader选举日志复制是raft最核心也是最复杂的功能,大体上来说一次正常的raft日志复制大致可以简化为以下几步完成:客户端向raft集群发送一次操作请求(比如kv数......
  • 小程序手写tab切换下边框跟随移动特效
    简单效果就是这样,主要是用到微信的动画和获取元素信息left处理。具体来说就是先给红色的边一个固定位置,等到点击切换下一个按钮的时候,获取到下一个按钮的left信息,然后对红色边框使用translateX动画效果,代码如下:wxml<viewclass="tab"><viewbindtap="changeType"id="a1......
  • elasticsearch中的数据类型:flattened和join
    flattened:比如你有一个字段的值是一个json,这个json里面又有很多字段,你又不想一个一个的定义这些字段到mapping,就可以用flattened直接动手:创建索引:PUTperson{"mappings":{"properties":{"patient_name":{"type":"text"},&......
  • 手写防抖
     目录前言导语代码部分总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语手写防抖编辑代码......
  • internal error, unexpected bytes at end of flate stream
     [query]Whatdoestheerrormean"websocket:internalerror,unexpectedbytesatendofflatestream"·Issue#643·gorilla/websockethttps://github.com/gorilla/websocket/issues/643[query]Whatdoestheerrormean"websocket:internaler......