精华内容
下载资源
问答
  • map for循环

    2020-08-27 14:41:32
    Map<String, Object> map = new HashMap<String, Object>(); map.put("aaa", 111); map.put("bbb", 222);... for(String key:map.keySet()){//keySet获取map集合key的集合 然后在遍历key
    Map<String, Object> map = new HashMap<String, Object>();
              map.put("aaa", 111);
              map.put("bbb", 222);
              map.put("ccc", 333);
              map.put("ddd", 444);
      for(String key:map.keySet()){//keySet获取map集合key的集合  然后在遍历key
              
            }
    
    展开全文
  • 全文共2375字,预计学习时长7分钟图源:Unsplash屏幕前的你,瞅瞅看,你的代码是不是通篇都是For循环?是不是眯眼靠近屏幕才能看清自己的代码?没错,我就是这样的。(难以切齿)For循环是解决问题的瑞士军刀,非常...

    全文共2375字,预计学习时长7分钟

    99254a0031568c077d2d19d6ee73f57a.png

    图源:Unsplash

    屏幕前的你,瞅瞅看,你的代码是不是通篇都是For循环?是不是眯眼靠近屏幕才能看清自己的代码?

    没错,我就是这样的。(难以切齿)

    For循环是解决问题的瑞士军刀,非常好用,但是当浏览代码想看看自己做了什么的时候,它们会把你淹没。

    此时,Map, filter和 reduce三种技术可以帮到你。

    它们可以通过提供描述迭代原因的函数替代选择,来矫正For循环的狂热。

    1cd25d5c75e6aee9b1cef1fd15a69c7e.png

    图源:Unsplash

    在之前的文章里,小芯有介绍过 JavaScript里使用这些技术,但是在Python中的实现稍许有些不同。

    下面将分别简要介绍三种技术,重点强调它们在JavaScript和Python中的语法不同,然后举出如何替换常见For循环的示例。

    77b84e170307af4b030d4aec0e020824.png

    Map, Filter, 和Reduce是什么?

    回顾之前写的代码,我意识到当循环字符串或数组时,95%的情况下,我都在做如下的事情之一:将系列语句映射(Map)到每个值,过滤(Filter)掉满足特定情况的值,或者将数据集减少(Reduce)到单个聚合值。

    基于这种观点,这三种方法是识别和实现,因为循环迭代的原因通常对应以下三种功能类型之一:

    · Map:对每个项应用相同的步骤集,储存结果。

    · Filter: 应用验证条件,储存计算值为True的项。

    · Reduce: 返回从一个元素传递到另一个元素的值。

    77b84e170307af4b030d4aec0e020824.png

    是什么让Map、Filter、Reduce与众不同?

    在Python中,这三种技术易函数的形式存在,而不是Array或String类的方法。这意味着要写成map(function, my_list)而不是my_array.map(function)。

    此外,每个技术都需要传递函数,该函数会被每个项执行。通常而言,函数会写成匿名函数,在JavaScript中叫胖箭头函数。但是在Python中会经常使用lambda表达式。

    Lambda表达式和箭头函数之间的语法其实非常相似。将=>替换为:,确保使用了关键词lambda,剩下的几乎就完全相同。

    1. // JavaScript Arrow Function
    2. const square = number => number * number;// Python Lambda Expression
    3. square = lambda number: number * number

    Lambda表达式和箭头函数之间的一个关键区别是,箭头函数可以扩展成有多个语句的完整函数,而lambda表达式只限于一个能返回的表达式。因此当使用map(), filter()或 reduce()时,如果需要对每个项执行多个操作,需要先定义函数,再把函数使用进去。

    1. def inefficientSquare(number):
    2. result = number * number
    3. return resultmap(inefficientSquare,my_list)
    77b84e170307af4b030d4aec0e020824.png

    替换For循环

    下面是三个常见的For循环示例,分别用map, filter和 reduce替换掉。编程目的:计算列表中奇数的平方和。

    首先是基本的For循环示例。请注意:这纯粹是为了演示,即使没有map/filter/reduce也可以改进它。

    1. numbers = [1,2,3,4,5,6]
    2. odd_numbers = []
    3. squared_odd_numbers = []
    4. total = 0# filter for odd numbers
    5. for number in numbers:
    6. if number % 2 == 1:
    7. odd_numbers.append(number)# squareall odd numbers
    8. for number in odd_numbers:
    9. squared_odd_numbers.append(number *number)# calculate total
    10. for number in squared_odd_numbers:
    11. total += number# calculate average

    将每个步骤替换为一个函数:

    1. from functools importreducenumbers = [1,2,3,4,5,6]odd_numbers = filter(lambda n: n % 2 == 1,numbers)squared_odd_numbers = map(lambda n: n * n, odd_numbers)total =reduce(lambda acc, n: acc + n, squared_odd_numbers)

    有几个重要语法要点需要强调。

    · map() 和 filter() 原生可用。但是reduce() 必须从 Python3+中的functools 库里导入。

    · Lambda表达式是所有三个函数里的第一个参数,而迭代表达式是第二个参数。

    · reduce()的Lambda表达式需要两个参数: accumulator (传递给每个元素的值)和单个元素本身。

    be202048dd8d4162279c2b15996359a9.png

    图源:Unsplash

    诚然,For循环在代码中不可或缺,但是过度使用未免有点单调,学习新知识为自己的代码锦上添花,不是更好吗?

    毕竟,学习新知识可不是坏事,小芯更不是什么魔鬼。(坏笑)

    最后,衷心祝愿大家远离洪水般的For循环。

    855b9896c27611f6bc4d1622af178cf9.png

    留言点赞关注

    我们一起分享AI学习与发展的干货

    如转载,请后台留言,遵守转载规范

    展开全文
  • R学习往期回顾:R学习:R for Data Science 循环-迭代(for while))R学习:R for Data Science 向量(1)R学习:R for Data Science 向量(2)R学习 从Tidyverse学起,入门R语言 dplyr合并数据R学习 流程控制 if,...

    ec0cd9a5b04b75c49df8fb1f5c56614f.png

    R学习往期回顾:

    R学习:R for Data Science 循环-迭代(for while))

    R学习:R for Data Science 向量(1)

    R学习:R for Data Science 向量(2)

    R学习 从Tidyverse学起,入门R语言 dplyr合并数据

    R学习 流程控制 if,else,ifelse

    R学习 从Tidyverse学起,入门R语言(tidyr和stringr)

    R学习 从Tidyverse学起,入门R语言(tibble,readr和dplyr)

    R学习:字符串

    R学习:环境和函数

    R学习:数据框的基本操作

    R学习:R for Data Science(五)

    R学习:R for Data Science(四)

    R学习:R for Data Science(三)

    R学习:R for Data Science(二)

    R学习:R for Data Science(一)

    for循环与函数式编程

    for 循环在 R 中不像在其他语言中那么重要,因为 R 是一门函数式编程语言。这意味着可以先将 for 循环包装在函数中,然后再调用这个函数,而不是直接使用 for 循环

    library(tidyverse)
    df <- tibble(
      a = rnorm(10),
      b = rnorm(10),
      c = rnorm(10),
      d = rnorm(10)
    )

    假设想要计算每列的均值。你可以使用 for 循环来完成这个任务

    output <- vector("double", length(df))
    for (i in seq_along(df)) {
      output[[i]] <- mean(df[[i]])
    }
    output

    将这段代码提取出来,转换成一个函数:

    col_mean <- function(df) {
      output <- vector("double", length(df))
      for (i in seq_along(df)) {
        output[i] <- mean(df[[i]])
      }
      output
    }

    还可以算每列的中位数和标准差

    col_median <- function(df) {
      output <- vector("double", length(df))
      for (i in seq_along(df)) {
        output[i] <- median(df[[i]])
      }
      output
    }
    col_sd <- function(df) {
      output <- vector("double", length(df))
      for (i in seq_along(df)) {
        output[i] <- sd(df[[i]])
      }
      output
    }

    通过添加支持函数应用到每列的一个参数,我们可以使用同一个函数完成与 col_mean()、col_median() 和 col_sd() 函数相同的操作:

    col_summary <- function(df, fun) {
      out <- vector("double", length(df))
      for (i in seq_along(df)) {
        out[i] <- fun(df[[i]])
      }
      out
    }
    col_summary(df, median)
    col_summary(df, mean)

    d9435c1419a4c154089f9f0d61798ae1.png

    将函数作为参数传入另一个函数的这种做法是一种非常强大的功能,它是促使 R 成为函数式编程语言的因素之一。
    我们将学习和使用 purrr 包,它提供的函数可以替代很多常见的 for 循环应用。 R 基础包中的应用函数族(apply()、 lapply()、 tapply() 等)也可以完成类似的任务,但 purrr 包中的函数更一致,也更易于学习。

    使用 purrr 函数代替 for 循环的目的是将常见的列表处理问题分解为独立的几个部分。
    • 对于列表中的单个元素,你能找到解决问题的方法吗?如果找到了解决方法,那么你就可以使用 purrr 将这种方法扩展到列表中的所有元素。

    • 如果你面临的是一个非常复杂的问题,那么如何将其分解为几个可行的子问题,然后循序渐进地解决,直至完成最终的解决方案?使用 purrr,你可以解决很多子问题,然后再通过管道操作将这些问题的结果组合起来。

    映射函数

    先对向量进行循环、然后对其每个元素进行一番处理,最后保存结果。这种模式太普遍了,因此 purrr 包提供了一个函数族来替你完成这种操作。每种类型的输出都有一个相应的函数:
    • map() 用于输出列表;
    • map_lgl() 用于输出逻辑型向量;
    • map_int() 用于输出整型向量;
    • map_dbl() 用于输出双精度型向量;
    • map_chr() 用于输出字符型向量。

    每个函数都使用一个向量作为输入,并对向量的每个元素应用一个函数,然后返回和输入向量同样长度(同样名称)的一个新向量。向量的类型由映射函数的后缀决定。

    我们可以使用这些函数来执行与最后一个 for 循环相同的操作。因为那些摘要函数返回的是双精度数,所以我们需要使用 map_dbl() 函数:

    map_dbl(df, median)
    map_dbl(df, mean)

    511baeab72b995a35804ce6a3b5108e3.png

    map_*() 和 col_summary() 具有以下几点区别

    • 所有 purrr 函数都是用 C 实现的。这使得它们的速度非常快,但牺牲了一些可读性

    • 第二个参数(即 .f,要应用的函数)可以是一个公式、一个字符向量或一个整型向量
    • map_*() 使用向 .f 传递一些附加参数,供其在每次调用时使用

    • 映射函数还可以保留名称

    快捷方式

    对于参数 .f,你可以使用几种快捷方式来减少输入量。假设你想对某个数据集中的每个分组都拟合一个线性模型。以下这个简单示例将 mtcars 数据集拆分成 3 个部分(按照气缸的值分类),并对每个部分拟合一个线性模型:

    models <- mtcars %>%
      split(.$cyl) %>%
      map(function(df) lm(mpg ~ wt, data = df))

    因为 R 中创建匿名函数的语法比较繁琐,所以 purrr 提供了一种更方便的快捷方式——单侧公式:

    models <- mtcars %>%
      split(.$cyl) %>%
      map(~lm(mpg ~ wt, data = .))

    我们在以上示例中使用了 . 作为一个代词:它表示当前列表元素(与 for 循环中用 i 表示当前索引是一样的)

    需要提取出 R平方 这样的摘要统计量

    需要先运行 summary() 函数,然后提取出结果中的 r.squared。我们可以使用匿名函数的快捷方式来完成这个操作:

    models %>%
      map(summary) %>%
      map_dbl(~.$r.squared)

    74486788cc0e119a2d3fd80911deada6.png

    因为提取命名成分的这种操作非常普遍,所以 purrr 提供了一种更为简洁的快捷方式:使用字符串

    models %>%
      map(summary) %>%
      map_dbl("r.squared")

    后面需要有apply()家族函数的基础知识,为了循序渐进,后面我们将会介绍apply家族,下回见。
    单基因泛癌分析链接

    TCGA单基因免疫相关泛癌分析,懒人福音, 重磅来袭mp.weixin.qq.com
    9fe7be9226d56efcace8f02b01437f69.png

    公众号“生信小课堂”

    16cfba8a44869af84393ff7253cb3aae.png

    TCGA数据分析课程:生物信息学教学

    展开全文
  • 1.数组是非常有用的,说数组就会用到的是循环 for循环: for(let i=0;i<arr.length;i++){}while循环2.ES6中新增的循环arr.forEach()-------代替普通的 for 循环arr.map()----------非常有用,做数据交互“映射” ...

    632d6c7a58f210264755f18460ae3925.png

    1.数组是非常有用的,说数组就会用到的是循环

    for循环: for(let i=0;i<arr.length;i++){}

    while循环

    2.ES6中新增的循环

    arr.forEach()-------代替普通的 for 循环

    arr.map()----------非常有用,做数据交互“映射”

    正常情况下,要配合 return,返回一个新的数组(平时使用 map,要用 return)

    如果没有 return,就相当于forEach

    arr.filter()----------过滤,过滤一些不合格的”元素“;如果回调函数返回true,就留下了。

    arr.some()----------类似于查找,数组里某一个元素符合条件,返回true

    arr.every()----------类似于查找,数组里每一个元素都要符合条件,才返回true

    arr.reduce()----------求数组的和、阶乘 // 从左往右

    arr.reduceRight()----求数组的和、阶乘 // 从右往左

    ES2017新增了一个运算符:幂 **

    之前求2的3次方:Math.pow(2,3) 现在:2**3

    新增循环:for...of... 循环数组

    e7f5de86698e41630c029d1da400fa0c.png

    例子1--传统循环

    <script>
     

    输出结果:a,b,c,d

    例子2--arr.forEach() 循环

    <script>
     

    6ccc286259effdd42095ae8dfa645d3a.png
    输出的结果

    注意:

    arr.forEach()、arr.map()、arr.filter()、arr.some()、arr.every()它们接收的参数一模一样,他们可以接收两个参数:(循环回调函数,this指向谁);

    【说白了你循环想干什么就得放这里边儿,你希望this指向谁】

    就是说 arr.forEach() 怎么用,其他的就怎么用,只是意思不同。

    例子3--思考this指向

    <script>
     

    696b7523c34891560a4aeafa67e42d9b.png
    this 默认指向的是 window

    例子4--第二个参数改为 this

    <script>
     

    bfad4d491aa1b085fec7448c26648471.png
    this 指向 number了

    例子5--arr.map() 不使用return情况

    <script>
     

    e8cc054b023a40f9a45067145b58cd66.png
    正常情况下,要配合 return,返回一个新的数组 ; 如果没有 return,就相当于forEach

    例子6--arr.map() 使用return情况

    <script>
     

    c99f429b07947cdeab926d88dcf14916.png
    平时使用 map,一定是要用 return 的

    例子7--arr.map() 使用return情况,重新整理过的数据结构

    21cb8e09ed961c6f997599ba0e8795d1.png

    f60295e3c8196c8a7b6b7b3101b5ca01.png
    结果就是整理好的

    例子8--arr.filter() 过滤新闻为热点(hot:true)

    <script>
     

    044207595715c50a8b12fabe8dbe3bfe.png
    结果就是2条数据
    <script>
     

    结论:arr.filter()--过滤,过滤一些不合格的”元素“; 如果回调函数返回true,就留下了!

    例子9--arr.some()

    <script>
     let arr=['apple','banana','orange'];
    
      let b=arr.some((val,index,arr)=>{
      
      return val=='banana2';
     });
     
     console.log(b);
    </script>

    输出的结果:false

    结论:arr.some()--类似于查找,数组里某一个元素符合条件,返回true!

    例子10--arr.every() 判断数组里面是不是都是奇数?

    8f9bc73d0e485a51c36cd5b5decfdaac.png
    结果:true

    结论:arr.every()--类似于查找,数组里每一个元素都要符合条件,才返回true!

    例子11--arr.reduce()----------求数组的和、阶乘 // 从左往右

    7b63f3317d9b293bf1e383b83f1b5c5a.png
    结果:55

    类似于递归,搞算法用得比较多。(前面数的和再加当前的数以此循环相加)

    7b63f3317d9b293bf1e383b83f1b5c5a.png
    结果:64

    阶乘

    例子12--幂运算符 (ES2017新增了一个运算符:幂 **)

    之前求2的3次方:Math.pow(2,3)

    60062420aefbb0600af702578b08f067.png
    结果:8

    现在:2**3

    <script> 
    
      

    结果是一样的:8

    例子13--arr.reduceRight()----求数组的和、阶乘 // 从右往左

    1759de1005df5f62d8549c2fdaf1067f.png
    结果:81

    例子14--新增循环:for...of... 循环数组

    acd3aa64c96b8a408cacc3041e0ae0c0.png

    51ccf1cb43a96cec03558f0e693c1b3f.png

    循环索引

    d5b9bf4699896754c5d7889ca5fa4c25.png

    a1e0efd1ca93cccddb9a114a6f40debe.png

    综合

    d5b9bf4699896754c5d7889ca5fa4c25.png

    22039f0ea5e1840ba278a9df754602d2.png

    THANK YOU!下节见

    展开全文
  • 天要吐槽下,我时不时地看到有些文章说“循环语句不好,你应该用 filter,map 和 reduce ”——每次看到有...在许多情况下,如果你想写性能好的代码,for 循环基本上是更好的选择。map, filter 和reduce等方法的目...
  • Map 概述Map 在 Java 中表示为键值对存储结构 Map,他的常用方法包括了get(Object key) 获取指定键(key)所对应的值(value)put(K key,V value) 将指定的键与值对应起来,并添加到集合中remove(Object key) 根据指定的...
  • 原文链接:https://blog.csdn.net/qq24357165/article/details/82748976先上结果:遍历时间上 for循环遍历 <...背景常用的数组遍历方式有很多,如最经典的for循环 for (var i = 0; i < arr.leng...
  • 基于范围的for循环[1]当我们用for循环来处理整个数组的时候,遍历数组元素的时候需要知道这个数组它一共有多少个元素,这样才可以用for循环来控制这个循环次数。C++11提供了一种新的for循环语句,即基于范围的for...
  • 而不是积累起来for循环和嵌套来处理列表和集合中的数据,您可以利用这些方法更好地将逻辑组织成功能的构建块,然后将它们链接起来以创建更可读和更易于理解的实现。ES6还为我们提供了一些更好的数组方法,比如.find,...
  • for循环遍历for(Map.Entry entry:map.entrySet()){System.out.println(entry.getKey()+"--->"+entry.getValue());}2.用Iterator迭代遍历Set set = map.entrySet();Iterator i = set.iterator();while(i....
  • 多重嵌套 for 循环太丑,运行效率又低,有没有什么办法可以降低它的嵌套层数?游戏内怎么简洁优雅的获取我想要的数据,又有良好的智能提示效果?有没有通用的提高运行效率的方案?没错,ES6 的 Map 就是为你定制的。...
  • 全文共2375字,预计学习时长7分钟图源:Unsplash屏幕前的你,瞅瞅看,你的代码是不是通篇都是For循环?是不是眯眼靠近屏幕才能看清自己的代码?没错,我就是这样的。(难以切齿)For循环是解决问题的瑞士军刀,非常...
  • java中Map遍历的四种方式在java中所有的map都实现了Map接口,...方法一:在for循环中使用entries实现Map的遍历:/*** 最常见也是大多数情况下用的最多的,一般在键值对都需要使用*/Map map = new HashMap();map.put(...
  • 1.什么是 Map类似于一个 json,但 json 的键(key)只能是字符串;Map 的键(key)可以是任意类型。2.map 的用法语法格式:let map=new Map();map.set(key,value);----设置一个值<script> 用法:map.set(key,...
  • 首先我们先有请「Map」简单介绍下自己「Map」映射是一种经典的数据结构类型,其中数据以 「key/value」 的键值对形式存在MapObject默认值默认不包含任何值,只包含显式插入的键一个 Object 有一个原型,原型上的键名...
  • Java_foundations_1遍历Map首先先整一个 Map 出来private 1.只遍历 Map 的 Key@Test 2. 只遍历 Map 的 Value@Test 3. 使用 forEach 遍历 Key&Value@Test 4. 使用 Iterator 遍历 Key&Value@Test 5. 流式...
  • 在Java中如何遍历Map对象How to Iterate ...既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)方法一 在for-each循环中使用entries来遍历这是最常...
  • 这种数据类型一般都会有增删查的方法,今天我们就来看看它的循环方法以前写过一篇关于ArrayList的循环效率问题《ArrayList哪种遍历效率最好,你真的弄明白了吗?》,感兴趣的同学可以去看看。hashMap 有常见的六七种...
  • 进入 根据JDK的新特性,用For循环Map,例如循环Map的Key java 代码 for(String dataKey : paraMap.keySet()) { System.out.println(dataKey ); } 这里要注意的是,paraMap是怎么样定义的,如果是简单的Map para欢迎进入...
  • 据JDK5的新特性,用For循环Map,例如循环Map的Key复制代码 代码如下:for(String dataKey : paraMap.keySet()) {System.out.println(dataKey );}注意的是,paraMap 是怎么样定义的,如果是简单的Map paraMap = new ...
  • 这篇文章主要介绍了Java for循环Map集合优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下在《for循环实战性能优化》中提出了五种提升for循环性能的...
  • 之前在某个资料上看的,于是轻信...我们分别使用map函数、列表推导式、for循环傻瓜式三种方式进行处理。并计算出每一种方式执行100次的总耗时。实验环境:window10python2.7pycharm代码如下: def xunhuan(x): re...
  • 根据JDK5的新特性,Java中用for循环Map,例如循环Map的Keyview sourceprint?1 for(String dataKey : paraMap.keySet()) {2 System.out.println(dataKey );3 }注意的是,paraMap 是怎么样定义的,如果是简单的Map ...
  • 使用map优化for循环

    2019-11-28 11:19:09
    使用map优化for循环 之前做的一个东西是点击一键升级按钮,修改后台返回的json数据里面某个对应的key:value值,没有优化钱使用了for循环完成,优化后使用map完成,因为for循环随着json数据的多少循环的次数不断增加...
  • for循环map

    2019-12-01 21:06:23
    Map<String, Object> printTypeAndModel = (Map<String, Object>)transObj.get("printTypeAndModel...for(Map.Entry<String, Object> oneMap : printTypeAndModel.entrySet()) { String key = o...
  • map函数改造for循环

    2018-05-02 09:58:24
    for循环函数 map函数
  • 主要介绍了python 为什么mapfor循环快,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
  • 如果不需要结果,直接使用for循环, 列表解析可以备选;除了追求代码优雅和特定规定情境,不建议使用map如果不需要返回结果这里有三个process, 每个任务将通过增加循环提高时间复杂度def process1(val, type=None):chr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,135
精华内容 2,054
关键字:

mapfor循环