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. 企业日常巡检shell脚本

    Linux内部查看系统信息 $INTERNET192忽略 [root@ mysql-master ~]# ip a|grep eth0|grep inet|cut -d' ' -f6|cut -d'/ ...

  2. css练习一

    总体的html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF- ...

  3. Python开发GUI工具介绍,实战:将图片转化为素描画!

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  4. SpringBoot-运行原理(四)

    1.自动配置 (1).pom.xml 在pom文件中 <parent> <groupId>org.springframework.boot</groupId> &l ...

  5. 手撕 JVM 垃圾收集日志

    下图是本篇的写作大纲,将从以下四个方面介绍怎么样处理 JVM 日志. 有准备才能不慌 想要分析日志,首先你得有日志呀,对不对.凡是未雨绸蒙总是没错的.所谓有日志的意思,你要把 JVM 参数配置好,日志 ...

  6. vmware虚拟机扩大硬盘

    记录一下对vmware虚拟机扩大硬盘的过程.操作有风险,重要数据请先进行备份. 1.首先在vcenter中将虚拟机下电,然后编辑虚拟机,将虚拟机硬盘扩大.具体操作见下图 2.打开虚拟机电源,利用fdi ...

  7. 基于 SOA 架构,创建 ego-search-web 项目-solr集群-zookeeper集群

    项目架构 Ego-search-web 服务的消费者,ego-rpc 服务提供者 建立 ego-search-web 项目 继承:ego 依赖:ego-common   ego-rpc-service ...

  8. MYSQL“错误代码#1045 Access denied for user 'root'@'********8' (using password:YES)”

    用IP远程连接数据库时报这个错误,我查看了下数据库是否开启了远程连接,已经开了,服务也启动着,网上的方法都是重置密码修改权限之类的,我发现都没用,我看了一下数据库所在的电脑,IP地址变了,然后真相了.

  9. 第6节:Java基础 - 三大集合(上)

    第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...

  10. B. Magic Stick

    题目:魔法棒 题意:可以对一个正数进行变换,如果数字是偶数,那么它可以变成3 * a / 2 如果这个数大于1,那么它可以变成a - 1 有两个数x和y,询问是否可以通过这些操作从x变成y,输出YES ...