map()、reduce()、filter()

  • map()内置函数把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过func处理后的结果,map()函数不对原序列或迭代器对象做任何修改

    >>> range(5)
    range(0, 5)
    >>> list(range(5))
    [0, 1, 2, 3, 4]
    >>> list(map(str,range(5)))   # 把列表中的元素转换为字符串
    ['0', '1', '2', '3', '4']
    >>> list(map(float,range(5)))
    [0.0, 1.0, 2.0, 3.0, 4.0]
    >>> def add5(v): # 单参数函数
    ...   return v + 5
    ...
    >>> list(map(add5,range(10)))
    [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    >>> def add(x,y): # 2个参数函数
    ...   return x + y
    ...
    >>> list(map(add,range(5),range(5,10)))
    [5, 7, 9, 11, 13]
    >>> list(map(lambda x,y: x+y,range(5),range(5,10)))
    [5, 7, 9, 11, 13]
    >>> def myMap(lst,value): # 自定义函数
    ...   return map(lambda item: item+value,lst)
    ...
    >>> list(myMap(range(5),5))
    [5, 6, 7, 8, 9]
    >>> list(myMap(range(5),8))
    [8, 9, 10, 11, 12]
    >>> def myMap(iterable,op,value):   #实现序列的四则运算
    ...   if op not in '+-*/':
    ...     return 'Error operator'
    ...   func = lambda i:eval(repr(i)+op+repr(value))...   return map(func,iterable)...>>> list(myMap(range(5),'+',5))[5, 6, 7, 8, 9]>>> list(myMap(range(5),'-',5))[-5, -4, -3, -2, -1]>>> list(myMap(range(5),'*',5))[0, 5, 10, 15, 20]>>> list(myMap(range(5),'/',5))[0.0, 0.2, 0.4, 0.6, 0.8]>>> list(myMap(range(5),'%',5))['E', 'r', 'r', 'o', 'r', ' ', 'o', 'p', 'e', 'r', 'a', 't', 'o', 'r']>>> myMap(range(5),'%',5)'Error operator'>>> import random>>> x = random.randint(1,1e30)>>> x970963733240482734030028347859>>> list(map(int,str(x)))[9, 7, 0, 9, 6, 3, 7, 3, 3, 2, 4, 0, 4, 8, 2, 7, 3, 4, 0, 3, 0, 0, 2, 8, 3, 4, 7, 8, 5, 9]
  • 标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累计的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始的值。例如,reduce(lambda x, y: x+y, [1,2,3,4,5])计算过程为((((1+2)+3)+4)+5)

    >>> from functools import reduce
    >>> seq=list(range(1,10))
    >>> seq
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> reduce(add,seq)
    45
    >>> reduce(lambda x,y:x+y,seq)
    45
    >>> import operator
    >>> operator.add(3,5)
    8
    >>> reduce(operator.add,seq)
    45
    >>> reduce(operator.add,seq,5)  # 指定累加的初始值为5
    50
    >>> reduce(operator.mul,seq)
    362880
    >>> reduce(operator.mul,range(1,6)) # 5的阶乘
    120
    >>> reduce(operator.add,map(str,seq))
    '123456789'
    >>> ''.join(map(str,seq))
    '123456789'

    >>> from random import randint    
    >>> lst = [randint(1,10) for i in range(50)] # 随机数列表
    >>> lst
    [8, 1, 10, 8, 7, 8, 7, 1, 1, 2, 4, 6, 1, 7, 10, 10, 9, 9, 6, 4, 8, 3, 5, 10, 10, 8, 3, 4, 9, 9, 1, 3, 6, 5, 1, 8, 5, 10, 10, 4, 5, 8, 10, 9, 8, 6, 7, 3, 10, 9]
    >>> def tjNum(dic,k):      # 统计元素出现次数
    ...   if k in dic:...     dic[k] += 1...   else:...     dic[k] = 1...   return dic...>>> reduce(tjNum,lst,{}){8: 8, 1: 6, 10: 9, 7: 4, 2: 1, 4: 4, 6: 4, 9: 6, 3: 4, 5: 4}
  • 内置函数filter()将一个单参数作用到一个序列上,返回该序列中使用该函数返回值True的那些元素组成filter对象,如果指定函数为None,则返回序列中等价于Ture的元素

    >>> seq = ['foo','x41','?! ','* * *']
    >>> def func(x):
    ...   return x.isalnum() # 测试是否为字母或数字
    ...
    >>> filter(func,seq) # 返回filter对象
    <filter object at 0x0000011DDB6F97F0>
    >>> list(filter(func,seq))
    ['foo', 'x41']
    >>> [x for x in seq if x.isalnum()]  # 使用列表推导式实现相同功能
    ['foo', 'x41']
    >>> list(filter(lambda x:x.isalnum(),seq)) # 使用lambda表达式实现相同功能
    ['foo', 'x41']
    >>> list(filter(None,[1,2,3,0,0,4,0,5])) # 指定函数为None
    [1, 2, 3, 4, 5]

内置函数_map()、reduce()、filter()的更多相关文章

  1. [python基础知识]python内置函数map/reduce/filter

    python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...

  2. python内置函数map/reduce/filter

    python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架 ...

  3. 内置函数_map、filter

     1.map   #循环帮你调用函数 map(makir,dir_names)     #生成器,结果是一个内存地址.为了节省内存,每次循环时,就按照定义的规则去生成一个数据,循环一次释放一次生成的数 ...

  4. Python经常使用内置函数介绍【filter,map,reduce,apply,zip】

    Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是 ...

  5. python内置函数lambda、filter、map、reduce

    lambda匿名函数 1.lambda只是一个表达式,函数体比def简单多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去 3.lambda函数 ...

  6. Python高阶函数_map/reduce/filter函数

    本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...

  7. python中的内置函数(一), lambda, filter, map

    https://www.processon.com/view/link/5c10da0ce4b099ae3e137bf6 1.内置函数 内置函数就是python中提供的,可以直接拿来用的函数,比如pr ...

  8. Python 内置函数 -- zip(), sorted(), filter()和map()

    内置函数1. zip() 打包(木桶效应)描述: zip() 函数用于将可迭代的对象作为参数, 将对象中对应的元素打包成一个个元组, 然后返回由这些元组组成的列表语法: zip([iterable, ...

  9. python中的内置函数lambda map filter reduce

    p.p1 { margin: 0; font: 12px "Helvetica Neue" } p.p2 { margin: 0; font: 12px "Helveti ...

随机推荐

  1. Linq(高级查询)

    一.条件查 public List<Users> ss(string ids) { List<Users> ulist=new List<Users>(); 声明使 ...

  2. 活用RPM获取包的信息

    rpm -q 功效大 如果你想要在系统上安装.卸载或是升级软件,需要对系统软件进行查询:或是有如下的场景: 安装了一个软件,需要知道这个软件的版本. 遇到一个文件,不认识它,需要知道它是什么软件,有什 ...

  3. int和Integer的自动拆箱/装箱相关问题

    java中为没一种基本类型都提供相应的包装类型. byte,short,char,int,long,float,double和boolean Byte,Short,Character,Integer, ...

  4. ccc切割刚体

    // http://www.emanueleferonato.com/2011/08/05/slicing-splitting-and-cutting-objects-with-box2d-part- ...

  5. 一个linux 4.9,4.14内核的bbr带宽估计偏低问题

    linux 4.9内核,bbr的带宽估计问题. 一个正常的bbr流量图: 对应的ttl图形: 一个异常的bbr流量图: 可以看出,异常的bbr流量图,出现了一个很低的带宽,且稳定在这个带宽10s左右, ...

  6. spark快速开发之scala基础之5高阶函数,偏函数,闭包

    高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...

  7. 工具类静态方法注入dao

    工具类里的一个静态方法需要调用dao查询数据库,用普通的spring注解注入一直报空指针异常,不能找到这个dao.参考的http://busing.iteye.com/blog/899322 的文章解 ...

  8. Pandas.Series.dt.dayofweek相关命令

  9. python note 05 字典及其操作

    1. '''#数据类型划分:可变数据类型,不可变数据类型不可变数据类型:元组,bool int str 可哈希可变数据类型:list,dict set 不可哈希dict key 必须是不可变数据类型, ...

  10. [leetcode]75. Sort Colors三色排序

    Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...