首页
学习
活动
专区
圈层
工具
发布

别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性

基本的逻辑就是在满足功能、需求和时间效率的基础上,要尽可能少用循环,少用回调,大幅提高代码的可读性和可维护性。...1.2、正确的做法 ①使用array.includes() 最基本的就是要会用array.includes()方法,可以少一次循环。...在这段代码中,我们使用 forEach 方法遍历 array1 中的每个元素。对于 array1 中的每个元素 item1,我们使用 includes 方法检查它是否不在 array2 中。...set 使用集合先去重,然后通过Set.has()方法来判断新增元素。...在这个代码中,我们首先创建了一个 Set 对象 set2 来存储 array2 中的所有元素。然后,我们使用 forEach 方法遍历 array1 中的每个元素 item1。

28700

Python 工匠:使用数字与字符串的技巧

但如果你是一位刚接触这段代码的新人,就完全是另外一码事了。 使用 enum 枚举类型改善代码 那么,怎么改善这段代码?最直接的方式,就是为这两个条件分支添加注释。...不过在这里,“添加注释”显然不是提升代码可读性的最佳办法(其实在绝大多数其他情况下都不是)。我们需要用有意义的名称来代替这些字面量,而 枚举类型(enum)用在这里最合适不过了。...在这篇文章里,它指只使用基本的加减乘除和循环、配合内置函数/方法来操作字符串,获得我们需要的结果。 所有人都写过这样的代码。...但是这样做最大的问题在于:随着函数逻辑变得更复杂,这段拼接代码会变得容易出错、难以扩展。事实上,上面这段 Demo 代码也只是仅仅做到看上去没有明显的 bug 而已 (谁知道有没有其他隐藏问题)。...要改善它有很多种办法,比如我们可以把这段多行字符串作为变量提取到模块的最外层。

78461
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 工匠:使用数字与字符串的技巧

    但如果你是一位刚接触这段代码的新人,就完全是另外一码事了。 使用 enum 枚举类型改善代码 那么,怎么改善这段代码?最直接的方式,就是为这两个条件分支添加注释。...不过在这里,“添加注释”显然不是提升代码可读性的最佳办法(其实在绝大多数其他情况下都不是)。我们需要用有意义的名称来代替这些字面量,而枚举类型(enum)用在这里最合适不过了。...在这篇文章里,它指只使用基本的加减乘除和循环、配合内置函数/方法来操作字符串,获得我们需要的结果。 所有人都写过这样的代码。...但是这样做最大的问题在于:随着函数逻辑变得更复杂,这段拼接代码会变得容易出错、难以扩展。事实上,上面这段 Demo 代码也只是仅仅做到看上去没有明显的 bug 而已 (谁知道有没有其他隐藏问题)。...要改善它有很多种办法,比如我们可以把这段多行字符串作为变量提取到模块的最外层。

    82310

    Python 工匠:编写条件分支代码的技巧

    系列文章: Python 工匠:善用变量改善代码质量 序言 编写条件分支代码是编码过程中不可或缺的一部分。...不过我们可以用一个很简单的技巧:“提前结束” 来优化这段代码: def buy_fruit(nerd, store): if not store.is_open(): raise...Hint: 恰当的封装不光直接改善了代码的可读性,事实上,如果上面的活动判断逻辑在代码中出现了不止一次的话,封装更是必须的。不然重复代码会极大的破坏这段逻辑的可维护性。 3....类似的,Python 里的 for/while 循环也支持添加 else 分支,它们表示:当循环使用的迭代对象被正常耗尽、或 while 循环使用的条件变量变为 False 后才执行 else 分支下的代码...代码内的分支语句不可避免,我们在编写代码时,需要尤其注意它的可读性,避免对其他看到代码的人造成困扰。 看完文章的你,有没有什么想吐槽的?请留言告诉我吧。

    3.2K111

    Pythonic:递归、回溯等5种方法生成不重复数字整数

    =j: print(ii + jj + k) OK,这段代码确实能够满足题目的功能要求,但是好像有个小问题:在上面的代码中,先选择i,然后再依次选择j和k,如果选到重复数字就“放回去”重新选,有没有办法可以保证在选择的时候避免选到已有的数字呢...修改上面的代码,再增加一个嵌套的循环来选择第4个数?要是让选择8个呢?再改?很明显,这是不行的,做不到自适应的代码绝对不是好代码。...如果循环次数没法提前确定,如何才能做到选择任意个(当然小于等于10)不重复数字来组成整数呢?答案是递归和回溯。...回溯法和递归法往往以代码简洁著称,但是在很多时候确实也比较难理解的。难道就真的没有更好的办法了吗?...既然选择了Python,那就让我们写一个下面这样Pythonic的代码,不用递归,也不用回溯,并且能够实现选择任意个数字来组成整数,OMG!

    1.3K70

    Python工匠:数字与字符串(上)

    但如果你是一位刚接触这段代码的新人,就完全是另外一码事了。 使用 enum 枚举类型改善代码 那么,怎么改善这段代码?最直接的方式,就是为这两个条件分支添加注释。...不过在这里,“添加注释”显然不是提升代码可读性的最佳办法(其实在绝大多数其他情况下都不是)。我们需要用有意义的名称来代替这些字面量,而枚举类型(enum)用在这里最合适不过了。...在这篇文章里,它指只使用基本的加减乘除和循环、配合内置函数/方法来操作字符串,获得我们需要的结果。 所有人都写过这样的代码。...但是这样做最大的问题在于:随着函数逻辑变得更复杂,这段拼接代码会变得容易出错、难以扩展。事实上,上面这段 Demo 代码也只是仅仅做到看上去没有明显的 bug 而已 (谁知道有没有其他隐藏问题)。...否:尝试使用模板引擎而不是复杂字符串处理逻辑来达到目的 Jinja2 Mako Mustache 3 不必预计算字面量表达式 我们的代码里偶尔会出现一些比较复杂的数字,就像下面这样: def

    69340

    使用 await 实现业务对 UI 的控制反转

    如此一来,UI 的后台代码会变得臃肿,职责不清晰。而且由于与界面的耦合太深,后期修改需求会非常麻烦。 问题出在哪?...UI 应该只是提供基本的用户交互,不应该成为业务逻辑的控制中心,需要将业务代码放到独立的模块中,业务代码通过接口来调用 UI,以实现用户的交互。...改善措施 容易想到的改善办法是:在 UI 中定义事件,业务层订阅事件,以获取用户操作的结果。...比如,一个笨办法就是:写一个 while(true) 循环,不断检测用户是否完成了操作,如果完成了,就返回操作结果。 这样就不用使用事件调来调去了,可以同步等待用户完成操作。...如此一来,业务逻辑写起来就会顺畅很多。

    20110

    Python 工匠:编写条件分支代码的技巧

    系列文章: Python 工匠:善用变量改善代码质量 Python 工匠:编写条件分支代码的技巧 序言 文由“壹伴编辑器”提供技术支持 编写条件分支代码是编码过程中不可或缺的一部分。...不过我们可以用一个很简单的技巧:“提前结束” 来优化这段代码: def buy_fruit(nerd, store): if not store.is_open(): raise...Hint: 恰当的封装不光直接改善了代码的可读性,事实上,如果上面的活动判断逻辑在代码中出现了不止一次的话,封装更是必须的。不然重复代码会极大的破坏这段逻辑的可维护性。 3....类似的,Python 里的 for/while 循环也支持添加 else 分支,它们表示:当循环使用的迭代对象被正常耗尽、或 while 循环使用的条件变量变为 False 后才执行 else 分支下的代码...代码内的分支语句不可避免,我们在编写代码时,需要尤其注意它的可读性,避免对其他看到代码的人造成困扰。 看完文章的你,有没有什么想吐槽的?请留言告诉我吧。

    1.2K40

    Python 工匠:编写条件分支代码的技巧

    系列文章 Python 工匠:善用变量来改善代码质量 Python 工匠:编写条件分支代码的技巧 序言 编写条件分支代码是编码过程中不可或缺的一部分。...不过我们可以用一个很简单的技巧:“提前结束” 来优化这段代码: def buy_fruit(nerd, store): if not store.is_open(): raise...Hint: 恰当的封装不光直接改善了代码的可读性,事实上,如果上面的活动判断逻辑在代码中出现了不止一次的话,封装更是必须的。不然重复代码会极大的破坏这段逻辑的可维护性。 3....类似的,Python 里的 for/while 循环也支持添加 else 分支,它们表示:当循环使用的迭代对象被正常耗尽、或 while 循环使用的条件变量变为 False 后才执行 else 分支下的代码...看完文章的你,有没有什么想吐槽的?请留言告诉我吧。

    69320

    「SDL第四篇」事件处理

    SDL只提供了这样几个简单的API,下面们来介绍几个常见的事件: SDL_WindowEvent : Window窗口相关的事件。 SDL_KeyboardEvent : 键盘相关的事件。...有的同学可以会通过修改代码最后面的 SDL_Delay 函数,增加它的等待时间让窗口多活一段时间。 但这样的体验实在是太糟糕了。有没有一种好的办法可以解决这个问题呢?...能不能窗口一直显示,直到检测到用户按了ctrl+c 或 使用鼠标点击关闭按钮后才关闭呢? 当然是可以的。我们只需要在之前的程序的末尾增加下面这段代码即可。它会一直检测用户是否按下了退出按钮。...我们来仔细看一下我们增加的代码吧。它由两层 while 循环组成,最里面的while循环的意思是,当队列中一直能取出事件,那就让他一直做下去,直到事件队列为空。...外面的while循环的意思是,当队列为空的时候,重新执行内部的while循环。 也就是说,这段代码一直在工作,从不休息。所以导致cpu占到了 100%。

    1.4K10

    说一说 final、finally、 finalize 有什么区别?

    finally则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-finally或者try-catch-finally来进行类似关闭JDBC连接、保证unlock锁等动作。...推荐使用final关键字来明确表示我们代码的语义、逻辑意图,这已经被证明在很多场景下是非常好的实践,比如:我们可以将方法或者类声明为final,这样就可以明确告知别人,这些行为是不许修改的。...对于finalize,我们要明确它是不推荐使用的,业界实践一再证明它不是个好的办法,在Java 9中,甚至明确将Object.finalize()标记为deprecated!...使用不当会影响性能,导致程序死锁、挂起等。通常来说,利用上面的提到的try-with-resources或者try-finally机制,是非常好的回收资源的办法。...另外,这种代码如果稍有不慎添加了对资源的强引用关系,就会导致循环引用关系,前面提到的MySQL JDBC就在特定模式下有这种问题,导致内存泄漏。

    21521

    Python:编写条件分支代码的技巧

    不过我们可以用一个很简单的技巧:“提前结束” 来优化这段代码: def buy_fruit(nerd, store): if not store.is_open(): raise MadAtNoFruit...Hint: 恰当的封装不光直接改善了代码的可读性,事实上,如果上面的活动判断逻辑在代码中出现了不止一次的话,封装更是必须的。不然重复代码会极大的破坏这段逻辑的可维护性。 3....谨慎使用三元表达式 三元表达式是 Python 2.5 版本后才支持的语法。在那之前,Python 社区一度认为三元表达式没有必要,我们需要使用 x and a or b 的方式来模拟它。...类似的,Python 里的 for/while 循环也支持添加 else 分支,它们表示:当循环使用的迭代对象被正常耗尽、或 while 循环使用的条件变量变为 False 后才执行 else 分支下的代码...看完文章的你,有没有什么想吐槽的?请留言告诉我吧。

    1.1K00

    等待按键释放,你的代码如何写?

    难点二是按键释放的检测,好多小伙伴想不到办法,还是用检测按键按下的if语句,效果不佳,小代在这呢推荐大家用while循环的方式去实现,具体怎么实现呢?...我们来捋一捋这段代码的运行,首先到了while(!...KEY){}循环继续执行,只要按键释放,自动跳出此循环,这样一来,我就只需要在这个while循环里去检测时间有没有到达5秒钟,时间精确度又不要求太高,那我们完全可以采用简单的记录次数来实现时间的计算,在以上代码中...,我假设while循环2000次的时间是5秒钟,while循环一次,对计次变量加1,完了再去检测有没有大于等于2000了,当大于等于2000了,就说明按下时间大于等于5秒钟了,此时我们需要关闭电机。...当出现第一种情况,就是按下时长小于5秒钟时间,这时直接退出while循环,在循环后面紧跟着关闭电机,再把按下计次变量清零,准备下一次的按键记录。 这样一来就实现对时间的记录,分情况控制。

    2K20

    为什么要对程序进行调试

    让我们从一段简单的 Python 代码开始,这段代码的功能是计算一组数字的平均值。...还可以将报错信息复制到搜索引擎或者大模型中,搜索一下,看看有没有人遇到过类似的问题。大部分情况下,都会有人遇到过类似的问题,并且已经解决了。 代码编辑器提示的错误信息也很重要。...不少同学遇到的都是一些低级问题,比如语法错误、变量拼写错误、函数调用时传递的参数不对、使用中文标点符号等。这些人眼很难一下发现的错误,代码编辑器可以在写代码的时候就提示出来。...也可以利用打印确定程序的运行路径,一个函数有没有被调用,一个 if 块有没有被执行,一个 while 循环执行了几次,到了哪一步中断了,都可以通过打印相关的信息来查看。...可以使用“单步调试”按钮 逐行执行代码,观察变量的值和状态。 “工欲善其事,必先利其器”。熟练掌握代码调试,对开发效率会有很大提升。当然,比调试工具更重要的,还是调试的思路。

    27510

    【测评】提高R运行效率的若干方法

    唯一需要改进的地方就是速度太慢了,因为做相关性分析,要计算6万多次相关系数,居然要花了547秒,接近10分钟的时候才计算完毕,时间就是金钱,有没有办法提高R程序的运行效率呢?...网上有很多大神提供了许多建议和方案,包括 Hadley Wickham在其《Advance R》里第最后一章也专门论述了如何提高R的运行效率,今天我们就以站长的这段代码为例,来评测一下各种方法的运行效率...首先,我们看看最花费时间的这段函数: 第一招:用apply函数代替For循环 其实我们知道在R里面最能提升效率的一个方法就是少用For循环,多用apply,因为R是面向数组的语言,apply面向数组遍历...作者用调用Cpp的方式来完成相关性计算,也就是说,你只需要调用这个包里的函数wCorr::weightedCorr就可以了。...第五招:多线程并行运算 经过上面的尝试之后,我们体会到pathway.score这个函数包含数据索引,计算,递归,循环,建表等诸多操作,因此单独使用一种方法可能对总体速度提高不是很明显,因此最好是能同时计算

    1.6K10

    JS学习系列 07 - 标签声明(Label Statement)

    这样可以实现,但是又多写了一个函数,那么有没有别的办法呢?...那么,你有没有想过 eval 里面为什么要加上括号呢?...也就是说,如果一段代码既能够以语句的方式解析,也能用语法的方式解析,在JS中,会优先按语句来解析。 { a : 1 } 复制代码 上面这段代码,在JS中的执行结果是什么呢?...千万不要在浏览器的控制台中去写这段代码,虽然结果和你开始想的结果一样, 但是,它是错误的。 这是在console控制台中执行的结果: ? 这是在watch中的执行结果: ?...aa是标签声明,包裹一个代码块,break 的作用是跳出当前的循环,本来是无法跳出外面那层for循环的,但是 break aa,这里跳出了整个代码块。

    3.3K20

    JS学习系列 07 - 标签声明(Label Statement)

    if (j === 2) return; } } } foo(); console.log('done'); 这样可以实现,但是又多写了一个函数,那么有没有别的办法呢...这就是goto语句的作用,通过标签声明一个代码块,然后在任何地方都可以执行 goto 'labe' 来进行程序跳转。...也就是说,如果一段代码既能够以语句的方式解析,也能用语法的方式解析,在JS中,会优先按语句来解析。 { a : 1 } 上面这段代码,在JS中的执行结果是什么呢? 大家思考2分钟.......千万不要在浏览器的控制台中去写这段代码,虽然结果和你开始想的结果一样, 但是,它是错误的。 这是在console控制台中执行的结果: 这是在watch中的执行结果: 可以看到两个结果是不一样的。...,break 的作用是跳出当前的循环,本来是无法跳出外面那层for循环的,但是 break aa,这里跳出了整个代码块。

    55210

    Python 工匠:编写地道循环的两个建议

    我会通过一些常见的代码场景,来详细解释它是如何改善循环代码的。1. 使用 product 扁平化多层嵌套循环虽然我们都知道“扁平的代码比嵌套的好”。但有时针对某类需求,似乎一定得写多层嵌套循环才行。...比如下面这段:图片对于这种需要嵌套遍历多个对象的多层循环代码,我们可以使用 product() 函数来优化它。product() 可以接收多个可迭代对象,然后根据它们的笛卡尔积不断生成结果。...然后提出了第一个建议:使用修饰函数来改善循环。之后我虚拟了一个业务场景,描述了按职责拆解循环内代码的重要性。...一些要点总结:使用函数修饰被循环对象本身,可以改善循环体内的代码itertools 里面有很多工具函数都可以用来改善循环使用生成器函数可以轻松定义自己的修饰函数循环内部,是一个极易发生“代码膨胀”的场地请使用生成器函数将循环内不同职责的代码块解耦出来...,获得更好的灵活性看完文章的你,有没有什么想吐槽的?

    1.3K10

    谈谈fnal、fnally、 fnalize有什么不同?

    fnally则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-fnally或者try-catch-fnally来进行类似关闭JDBC连接、保证unlock锁等动作。...推荐使用fnal关键字来明确表示我们代码的语义、逻辑意图,这已经被证明在很多场景下是非常好的实践,比如:我们可以将方法或者类声明为fnal,这样就可以明确告知别人,这些行为是不许修改的。...对于fnalize,我们要明确它是不推荐使用的,业界实践一再证明它不是个好的办法,在Java 9中,甚至明确将Object.fnalize()标记为deprecated!...我在前面介绍了fnal在实践中的益处,需要注意的是,fnal并不等同于immutable,比如下面这段代码: fnal Lis srLis = new ArrayLis(); srLis.add...另外,这种代码如果稍有不慎添加了对资源的强引用关系,就会导致循环引用关系,前面提到的MySQL JDBC就在特定模式下有这种问题,导致内存泄漏。

    92840
    领券