map
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
即map(函数,Iteratable)
map()
传入的第一个参数是f
,即函数对象本身。由于结果r
是一个Iterator
,Iterator
是惰性序列,因此通过list()
函数让它把整个序列都计算出来并返回一个list。
>>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce
reduce
把一个函数作用在一个序列[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方说对一个序列求和,就可以用reduce
实现:
>>> from functools import reduce >>> def add(x, y): ... return x + y ... >>> reduce(add, [1, 3, 5, 7, 9]) 25
基础语法就是这么多了,下面看一下实战。
作业:
利用map
和reduce
编写一个str2float
函数,把字符串‘123.456‘
转换成浮点数123.456
:
代码:
>>> def str2float(s): ... def char2num(c): ... return {‘0‘:0,‘1‘:1,‘2‘:2,‘3‘:3,‘4‘:4,‘5‘:5,‘6‘:6,‘7‘:7,‘8‘:8,‘9‘:9}[c] #返回一个dict ... if not ‘.‘ in s: #没有小数点 ... return reduce(lambda x,y:x*10+y,map(char2num,s)) ... spt=s.split(‘.‘) #分割为两部分 ... spt[1]=‘0‘+spt[1] #加上0才能化为0.xxx的形式,不然会是x.xxx的形式 ... return reduce(lambda x,y:x*10+y,map(char2num,spt[0]))+reduce(lambda x,y:x*0.1+y,map(char2num,spt[1][::-1])) #倒着隔一个取 ... >>> print(‘str2float(\‘123.456\‘) =‘, str2float(‘123.456‘)) str2float(‘123.456‘) = 123.456
时间: 2024-11-07 16:48:36