python 内置了map()和reduce()函数

1、map()函数

map()函数接收两个参数,一个是函数,一个是可迭代对象Iterable,map将传入的函数依次作用于序列的每一个元素。并把结果作为一个迭代器Iterator返回。

比如,函数f(x) = x2,要把这个函数作用在一个list[1,2,3,4,5,6]上:

>>> def f(x):
... return x*x
...
>>> map(f,[1,2,3,4,5,6])
<map object at 0x00E0BCF0>
>>> m = map(f,[1,2,3,4,5,6])
>>> list(m)
[1, 4, 9, 16, 25, 36]

此例中,map传入的第一个参数是f函数,由于结果m是一个Iterator,可以通过list()函数把整个序列都计算出来并显示一个list。

再比如:把list中所有的数字转化为字符串:

>>> list(map(str,[1,2,3,4,5,6]))
['', '', '', '', '', '']

2、reduce()函数

reduce()函数内置在模块functools中。reduce也是把一个函数作用在一个序列上,只是这个传入的函数必要要接收2个参数,reduce再把这个传入的函数运算的结果和序列的下一个元素一起传入这个函数中,效果相当于:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

例子1:对一个list求和:

>>> from functools import reduce
>>> def add(x,y):
... return x+y
...
>>> reduce(add,[1,2,3,4,5,6])
21

例子2:把list[1,2,3,4,5,6]转换成整数123456:

>>> from functools import reduce
>>> def listToInt(x,y):
... return x*10 + y
...
>>> reduce(listToInt,[1,2,3,4,5,6])
123456

例子3:把一个str字符串类型的对象转换成int整数类型的对象:

>>> from functools import reduce
>>> DIGITS={'':0,'':1,'':2,'':3,'':4,'':5,'':6,'':7,'':8,'':9}
>>> def str2int(s):
... def fx(x,y):
... return x*10 +y
... def char2num(s):
... return DIGITS[s]
... return reduce(fx,map(char2num,s))
...
>>> str2int('')
1234567

例子4:利用mao()函数,把用户输入的不规范的英文名字,变为首字母大写,其他的小写。输入['abc','xYz'],输出['Abc','Xyz']:

>>> def normal(n):
... return n[0].upper()+n[1:].lower()
...
>>> l=['abc','xYz']
>>> list(map(normal,l))
['Abc', 'Xyz']

这里没有考虑开端为空字符的情况。

例子5:利用reduce()函数,编写一个函数,将接收到的list各个元素求积:

>>> from functools import reduce
>>> def pro(x,y):
... return x*y
...
>>> reduce(pro,[2,4,6,8])

例子6:使用reduce和map函数,编写一个str2float函数,把字符串‘12.34’转换为浮点型12.34:

>>> from functools import reduce
>>> def str2float(s):
... def pro(x,y):
... return x*10 +y
... def char2num(s):
... return DIG[s]
... DIG = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
... num = s.split('.')
... intnum = reduce(pro,map(char2num,num[0]))
... floatnum = reduce(pro,map(char2num,num[1]))/(pow(10,len(num[1])))
... return intnum + floatnum
...
>>> str2float('12.34')
12.34

python高阶函数——map/reduce的更多相关文章

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

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

  2. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  3. Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted

    1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...

  4. Python高阶函数map、reduce、filter、sorted的应用

    #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...

  5. JavaScript高阶函数 map reduce filter sort

    本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数            一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数          1.高阶函数之map:   ...

  6. python之高阶函数map/reduce

    L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print(L) Python内建了map()和reduce()函数. 我们先看 ...

  7. Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数

    高阶函数Higher-orderfunction 变量可以指向函数 >>> abs #abs(-10)是函数调用,而abs是函数本身 <built-in function ab ...

  8. Python高阶函数--map

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把list 的每个元素依次作用在函数 f 上,得到一个新的 list 并返回. 例如,对于lis ...

  9. JavaScript高阶函数map/reduce、filter和sort

    map() 举例说明,比如我们有一个函数f(x)=x²,要把这个函数作用在一个数组[1,2,3,4,5,6,7,8,9]上. 由于map()方法定义在JavaScript的Array中,我们调用Arr ...

随机推荐

  1. 使用Feign访问接口

     添加主要依赖 使用Feign访问接口的配置,如果服务不在Eureka上,可以不加Eureka的依赖,用在FeignClient上指定url的方式访问 dependencies { compile(' ...

  2. FastAdmin的基本使用

    FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架. 1.在线命名管理 (1)菜单的生成 (2)一键 crud  首先要安装在线命名 在翡翠分类生成菜单,如下: 它的 ...

  3. shell ssh 远程机器 追加文件内容

    在host1上,把下面的两行内容通过ssh追加到host2上的/etc/ca-certificates.conf文件中 I am a student Are you ok ssh host2 &quo ...

  4. SpringBoot项目创建与第一个SSM项目示例

    本节介绍SpringBoot创建第一个示例SSM项目的完整过程,使用工具STS,与IDEA操作基本类似. 示例代码在:https://github.com/laolunsi/spring-boot-e ...

  5. Java修炼——面向对象的三大特征_多态_多态的三个必要条件

    多态指的是同一个方法调用,由于对象不同可能会有不同的行为,现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1.多态是方法的多态,不是属性的多态(多态与属性无关) 2.多态的存在有三个必要条 ...

  6. [TimLinux] myblog 首页创建

    1. 设计 2. 结构 3. 实现 templates/common/layout.html: <!DOCTYPE html> <html lang="zh"&g ...

  7. Zabbix 监控MySQL、Apache、Nginx应用监控

    zabbix对第三方应用软件的监控,主要有两个工作难点,一个是编写自定义监控脚本,另一个是在编写模板并导入zabbix web中,编写脚本这个要根据 监控需求定制即可,而编写模板文件有些难度,不过网上 ...

  8. 稳定易用的 Django 分页库,完善分页功能

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在 通过 Django Pagination 实现简单分页 中,我们实现了一个简单的 ...

  9. lede install unifi controller

    requirement: sdb3 should be formated as ext4, DO not use f2fs/NTFS/exFAT. debootstrap --arch=amd64 s ...

  10. deconstructSigs|探寻cosmic的独特“气质”-mutation signature !

    deconstructSigs-mutation signature看一下你的数据是什么“气质”的? 本文首发于“生信补给站” https://mp.weixin.qq.com/s/k7yzk9hPX ...