码迷,mamicode.com
首页 > 其他好文 > 详细

map/reduce函数

时间:2017-07-23 00:49:46      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:通过   函数   int   res   logs   数字   iter   处理   另一个   

map

map()函数接受两个值,一个是函数,另一个是Iterable,map将传入的函数依次作用于序列的每一个元素,并将结果作为一个新的Iterator返回。

我们想把f(x)=x2作用于一个列表[1,2,3,4,5,6,7,8,9],就可以这样做

>>> def f(x):
	return x*x
>>> res = map(f,[1,2,4,5,6,7,8,9])
>>> print(res)
<map object at 0x0000000002B34860>
>>> list(res)
[1, 4, 16, 25, 36, 49, 64, 81]

map()传入的第一个参数是f,结果res是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

还可以计算复杂的函数,将数字转化为字符串

>>> r = map(str,[1,2,3,4,5])
>>> list(r)
[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘]

 

reduce

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

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

 把[1,2,3,4]变成整数1234,reduce就派上用场了

>>> from functools import reduce
>>> def fn(x,y): return x*10+y >>> reduce(fn,[1,2,3,4]) 1234

 

有个很有意思的例子,考虑到str本身也是一个序列,我可以配合map函数将str转换成int,其实没什么卵用,因为python提供了int()函数

>>> def fn(x,y):
	return x*10+y
>>> def char_to_num(s):
	return {‘0‘: 0, ‘1‘: 1, ‘2‘: 2, ‘3‘: 3, ‘4‘: 4, ‘5‘: 5, ‘6‘: 6, ‘7‘: 7, ‘8‘: 8, ‘9‘: 9}[s]
>>> reduce(fn,map(char_to_num,‘13568‘))
13568

先用map()函数将char_to_num()作用于序列‘13568’,得到[1,3,5,6,8]这样一个Iterator对象,再利用reduce()函数处理。就实现了将str转换为int的功能。

 

 

map/reduce函数

标签:通过   函数   int   res   logs   数字   iter   处理   另一个   

原文地址:http://www.cnblogs.com/mingo724/p/7223261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!