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. dubbo 支持的7种协议

    建议看原文 转自:https://blog.csdn.net/xiaojin21cen/article/details/79834222  1.dubbo 协议 (默认) 2.rmi 协议 3.hes ...

  2. Python:笔记1_字符串处理【转载】

    [转载自:https://www.cnblogs.com/houht/p/3308634.html] 1. 判断字符串str是否为空Approach 1:如果字符串长度为0,说明字符串为空,code如 ...

  3. @controller不能被识别

    记得controller的类不能起名为Controller,否则不能被识别!!!!!

  4. CSS样式学习-3、轮廓、伪类/元素、display-flex布局

    一.轮廓 outline绘制于元素周围的一条线,位于边框边缘外围. 属性规定元素轮廓的样式.颜色.宽度. outline-width轮廓宽度,属性:thin细轮廓.medium中等(默认值).thic ...

  5. Java中的反射总结

    反射是获取运行时类信息,即常量区中的Class信息. 要获取类信息,必然需要依据,不然系统怎么指定你要获取那个类信息, 类信息在java中就是Class类的一个对象,它是一个java类抽象,换句话说它 ...

  6. 示例:pm_multiple_models 匹配——形状匹配

    * This example program shows how to use HALCON's shape-based matching* to find multiple different mo ...

  7. linux 下将tomcat注册成服务并开机启动

    一.将startup.sh和shutdown.sh新建软连接到/usr/bin ln -s /usr/local/apache-tomcat-8.5.38/bin/startup.sh /usr/bi ...

  8. centos下通过pid查看进程的绝对路径的方法

    例如: 我想要知道我执行中的mysql路径 netstat -nlp pid拿到15330,然后 cd /proc/15330 由于linux在启动一个进程时,会在/proc下创建一个以PID命名的文 ...

  9. ASP.NET网站报Service Unavailable错误的解决办法

    现象:网站打不开,提示 service unavailable 原因:IIS资源不足,程序占用资源太多,应用程序池会被自动禁用 解决办法:重启IIS,在命令行中输入iisreset即可

  10. oracle 新增并返回新增的主键

    oracle 的insert into 语句需要返回新增的主键的时候,可以使用一下insert 语法: insert into ims.t_bank_inquire_results (t_date,l ...