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. dll 恐怖的代码调整

    总结一波这998的不得不提的调整代码的心得. 调整代码的背景:现有wps美化代码分散在各个插件里面,导致每次修改一小部分代码,都要全新编译,并且只能跟版本发,所以决定将wps的美化代码整合成一个插件d ...

  2. OS与Internet

    1 操作系统 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...

  3. 工作流调度器azkaban

    为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后及前后依赖关系 为了很 ...

  4. leetcode236

    class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { ...

  5. leetcode981

    考虑线性的搜索会超时,所以用二叉搜索来解决,代码如下: class TimeMap: def __init__(self): self.ST = dict() def set(self, key: ' ...

  6. spark-1

    先测试搭好的spark集群: 本地模式测试: 在spark的目录下: ./bin/run-example SparkPi 10 --master local[2] 验证成功: 集群模式 Spark S ...

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

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

  8. python 安装包制作

    1. __init__.py 2.模块1 模块2 3.setup.py from distutils.core import setup setup(name='modules_name',versi ...

  9. 好看的alert弹出框sweetalert

    转载:https://www.cnblogs.com/lamp01/p/7215408.html

  10. HDU-1260.Tickets(简单线性DP)

    本题大意:排队排票,每个人只能自己单独购买或者和后面的人一起购买,给出k个人单独购买和合买所花费的时间,让你计算出k个人总共花费的时间,然后再稍作处理就可得到答案,具体格式看题意. 本题思路:简单dp ...