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. python中__get__,__getattr__,__getattribute__的区别

    __get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的 ...

  2. T-SQL中的APPLY用法

    原文出处:http://www.sqlservercentral.com/articles/Stairway+Series/121318/ 从SQL Server 2005开始,微软添加了一个新的运算 ...

  3. 剑指offer——合并两个排序的链表——对象、引用和赋值初接触

    题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则. 先公布结果: /* public class ListNode { int val; List ...

  4. Process 开启子进程 的两种方式、join控制子进程、守护进程

    一.join控制子进程的一种方式 当主进程需要在子进程结束之后结束时,我们需要用到join来控制子进程. import time import random from multiprocessing ...

  5. 微信小程序--动画animation

    js: list:[], contentflag:false   this.animation = wx.createAnimation({ duration: 500, timingFunction ...

  6. 数据导入Excel时,出现ole error 800AC472这个错误,怎么解决。

    我也出现过这个问题 在生成报表的时候不要动EXCEL中的任何单元格 让它完成保存就可以了 或者是把office 2003 删除下载一个office 2000就可以解决 据说是版本兼容的问题 不是高手 ...

  7. 100-days: thirteen

     Title: “The Godfather turns 50” <教父>50周年 turn 达到某个年龄 Mario Puzo's(马里奥·普佐) "The Godfather ...

  8. Linux基本的操作

    一.为什么我们要学习Linux 相信大部分人的PC端都是用Windows系统的,那我们为什么要学习Linux这个操作系统呢???Windows图形化界面做得这么好,日常基本使用的话,学习成本几乎为零. ...

  9. Java日志框架-logback的介绍及配置使用方法(纯Java工程)(转)

    说明:内容估计有些旧,2011年的,但是大体意思应该没多大变化,最新的配置可以参考官方文档. 一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分 ...

  10. ES6 proxy(代理拦截) &&Reflect