zoukankan      html  css  js  c++  java
  • python 内建函数 filter,map和reduce

         python 内建函数 filter,map和reduce, 三个函数比较类似,都是应用于序列的内置函数,常见的序列包括list、tuple、str等。而且三个函数都可以和lambda表达式结合使用。下面分别介绍。

    一、filter

    filter(bool_func,seq):此函数的功能类似过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。

    例如 : 从[1,2,3,4,5,6,7,8,9]序列中获取被3整除的序列

    print filter(lambda x: x%3 == 0,[1,2,3,4,5,6,7,8,9])

    结果为:[3, 6, 9]

    二、map

    map(func,seq1[,seq2...]):

    对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。

    例如:

     1、def add100(x):

        return x + 10

      list1 = [10,20,30]

      print map(add100,list1)

      输出:[20, 30, 40]  

      map 使list1中的所有元素都执行了add100方法,返回了结果list

     2、如果给出了额外的可迭代参数,则对每个可迭代参数中的元素‘并行’的应用‘function’

      例如:

      def  fnXYZ(x,y,z):

        return x*100 + y*10 +z

      list1 = [10,20,30]

      list2 = [40,50,60]

      list3 = [70,80,90]

      print map(fnXYZ, list1,list2,list3)

      结果输出:[1470, 2580, 3690]

       结果在每个list中,取出了下标相同的元素,执行了fnXYZ()函数

     3、如果'function'给出的是‘None’,自动假定一个‘identity’函数

      例如:

      list1 = [10,20,30]

      print map(None,list1)

      输出:[10,20,30]

      def fnXYZ(x,y,z):

        return x*100 + y*10 +z

      list1 = [10,20,30]

      list2 = [40,50,60]

      list3 = [70,80,90]

      print map(None, list1,list2,list3)

      结果输出:[(10, 40, 70), (20, 50, 80), (30, 60, 90)]

     4、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。

      输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']

      input =['adam', 'LISA', 'barT']

      print map(lambda x:x.capitalize(), input) # 这里调用了字符串内置函数capitalize(首字母大写,其余小写)

      结果:['Adam', 'Lisa', 'Bart']  

    、reduce

      reduce(func,seq[,init]):func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值:如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素。

      例如: 

      print reduce(lambda x,y : x * y, [1,2,3,4,5,6])

      结果:720

      n=5
      print reduce(lambda x,y: x * y,range(1,n)) #n的阶乘,

      当n=5时,结果为:24

      print reduce(lambda x,y: x * y,range(1,n),10) #n的阶乘的10倍

      结果:240

  • 相关阅读:
    CGAffineTransform的使用大概:
    CYLTabBarController的简单使用
    Masonry详解
    Swift学习 (四)
    《Advanced Bash-scripting Guide》学习(二):测试脚本调用的参数是否正确
    《Advanced Bash-scripting Guide》学习(一):对一个增强和广义的删除logfile的脚本的理解
    [JSOI2007]字符加密Cipher
    codevs 3160 最长公共子串
    codevs 1500 后缀排序
    浅谈后缀数组
  • 原文地址:https://www.cnblogs.com/shaosks/p/5620260.html
Copyright © 2011-2022 走看看