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. 小白的springboot之路(一)、环境搭建、第一个实例

    小白的springboot之路(一).环境搭建.第一个实例 0- 前言 Spring boot + spring cloud + vue 的微服务架构技术栈,那简直是爽得不要不要的,怎么爽法,自行度娘 ...

  2. Netty学习——Thrift的入门使用

    Netty学习——Thrift的入门使用 希望你能够,了解并使用它.因为它是一个效率很高的框架 官网地址:http://thrift.apache.org/ 1.Thrift数据类型 一门技术如果需要 ...

  3. nginx代理跨域,根据路径参数改变目标服务器地址

    我们都知道nginx是可以做跨域代理的: location ^~ /visited-path/ { proxy_pass http://another-domain/; } 举个例子:假如我们的代理服 ...

  4. MyBatis的配置与使用(增,删,改,查)

    ---恢复内容开始--- Mybatis入门介绍 一.MyBatis介绍 什么是MyBtis? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框 ...

  5. 关于token你需要知道的

    第一.token的生成 1)token的生成接口为 https://{你的endpoint} /v3/auth/tokens 比如我是北京一的,我的endpoint就是 iam.cn-north-1. ...

  6. 华为云BigData Pro解读: 鲲鹏云容器助力大数据破茧成蝶

    华为云鲲鹏云容器 见证BigData Pro蝶变之旅大数据之路顺应人类科技的进步而诞生,一直顺风顺水,不到20年时间,已渗透到社会生产和人们生活的方方面面,.然而,伴随着信息量的指数级增长,大数据也开 ...

  7. qs库使用指南

    qs是一个流行的查询参数序列化和解析库.可以将一个普通的object序列化成一个查询字符串,或者反过来将一个查询字符串解析成一个object,而且支持复杂的嵌套.它上手很容易: Qs.parse('x ...

  8. DataFrame 链式赋值

    在运行以下Python代码时,Pandas抛出SettingWithCopyWarning警告: row_data = df_pred.loc[key] row_data['col'] = new_v ...

  9. 如何在ASP.NET Core 中快速构建PDF文档

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...

  10. POJ-1743 Musical Theme(最长不可重叠子串,后缀数组+二分)

    A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the ...