400-616-5551

您所在位置: 首页> 学习课程> Python培训:Python基础之map、reduce函数

Python培训:Python基础之map、reduce函数

发布百知教育 来源:学习课程 2019-10-22

1、 map函数


map()是 python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的object并返回。(python2返回列表,Python3返回迭代对象)


map()的使用方法形如map(f(x),Itera),它有两个参数,第一个参数为某个函数,第二个为可迭代对象。


基本用法:


注意:python3中map()返回的是一个object,因为map()转变成了迭代器来节约空间,返回的是可迭代对象。


如果需要list可以直接用list(……)来强制返回一个列表。


Map的主要作用就是:并行!并行!并行!map函数和zip函数都是用来进行并行运算,迭代等。


在多进程编程中,Pool池的用法中一种就是利用map函数开启多进程,可以大大提高程序的效率。


Map原理:



python培训


在最简单的形式中,map()带一个函数和队列,将函数作用在序列的每个元素上,然后创建由每次函数应用组成的返回值列表。

>>> def mymap(func,seq):
         mapped_seq=[]
         foreachItem in seq:
                   mapped_seq.append(func(eachItem))
         returnmapped_seq
调用函数运行:
>>> def tes(x):
         returnx*x
 
>>> print(mymap(tes,range(10)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
 
下面,举几个例子看下:


>>> list(map(lambdax,y:x+y,[1,3,5,7,9],[2,4,6,8,10]))

[3, 7, 11, 15, 19]
>>> def format_name(s):
         s1=s[0:1].upper()+s[1:].lower()
         returns1
 
>>> list(map(format_name,['adam','LISA','barT']))
['Adam', 'Lisa', 'Bart']
>>> l2=map(lambdax,y:x**y,[1,2,3],[1,2,3])
>>> for i in l2:
         print(i)
 
        
1
4
27
>>> l3=map(lamdax,y:(x**y,x+y),[1,2,3],[1,2,3])
SyntaxError: invalid syntax
>>> l3=map(lambdax,y:(x**y,x+y),[1,2,3],[1,2,3])
>>> for i in l3:
         print(i)
 
        
(1, 2)
(4, 4)
(27, 6)
#参数可以数量不一样,但不能不同类型
>>> l4=map(lambdax,y:(x**y,x+y),[1,2,3],[1,2])
>>> for i in l4:
         print(i)
 
        
(1, 2)
(4, 4)
>>> l4=map(lambdax,y:(x**y,x+y),[1,2,3],[1,2,'a'])
>>> for i in l4:
         print(i)
 
        
(1, 2)
(4, 4)
Traceback (most recent call last):
 File "<pyshell#107>", line 1, in <module>
   for i in l4:
 File "<pyshell#104>", line 1, in <lambda>
   l4=map(lambda x,y:(x**y,x+y),[1,2,3],[1,2,'a'])
TypeError: unsupported operand type(s) for** or pow(): 'int' and 'str'
#特殊用途,类型转换
>>> l=map(int,'1234')
>>> for i in l:
         print(type(i))
         print(i)
 
        
<class 'int'>
1
<class 'int'>
2
<class 'int'>
3
<class 'int'>
4


 2reduce函数


reduce()函数在库functools里,如果要使用它,要从这个库里导入。reduce函数与map函数有不一样地方,map操作是并行操作,reduce函数是把多个参数合并的操作,也就是从多个条件简化的结果,在计算机的算法里,大多数情况下,就是为了简单化。比如识别图像是否是一只猫,那么就是从众多的像素里提炼出来一个判断:是或否。可能是几百万个像素,就只出来一个结果。在GOOGLE大规模集群里,就是利用这个思想,把前面并行处理的操作叫做map,并行处理之后的结果,就需要简化,归类,把这个简化和归类的过程就叫做reduce
reduce()的使用方法形如reduce(function, iterable[, initializer]),它的形式和map()函数一样。不过参数fx)必须有两个参数,initializer是可选的
reduce 有三个参数


python培训


reduce 使用了一个二元函数(一个接收带带两个值作为输入,进行了一些计算然后返回一个值作为输出),一个序列,和一个可选的初始化器,卓有成效地将那个列表的内容"减少"为一个单一的值,如同它的名字一样。

例子:
>>> from functools import reduce
>>> def add(x,y):
         returnx+y
 
>>> res=reduce(add,[1,2,3,4,5])
>>> print(res)
15
它返回的结果相当于(1+2+3+4+5
Reduce原理图:


python培训


它通过取出序列的头两个元素,将他们传入二元函数来获得一个单一的值来实现。然后又用这个值和序列的下一个元素来获得又一个值,然后继续直到整个序列的内容都遍历完毕以及最后的值会被计算出来为止。

 


python培训班:http://www.baizhiedu.com/python2019


本文内容来自公众号: python与算法学习  

上一篇:java培训班:要成为Java架构师的学习哪些知识?

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请