map和reduce(第24篇)

了解map和reduce之前,你得了解高阶函数,也就是上一篇内容。

知道了函数可以作为另一个函数的参数之后,再来了解map就简单多了,因为map和reduce都是高阶函数。

map函数

map()函数接收两个参数,第一个参数是一个函数,第二个参数是一个Iterable对象,map函数会将第一个函数参数依次作用到第二个Iterable参数的每一个元素上,然后返回一个新的Iterable。
比如你想求list中的每一个元素的绝对值,可以使用map函数:

>>> m = map(abs, [-10, 2, -4, 0, 1, 6, -3])
>>> list(m)
[10, 2, 4, 0, 1, 6, 3]

注意map返回的是一个map对象,map对象属于Iterable。如果你想让它变成list,可以使用list()函数。

reduce函数

reduce()函数也接受两个参数,第一个参数是一个函数,第二个参数是一个Iterable对象,但reduce函数会将第一个函数参数作用在第二个Iterable参数的第一个元素上,得到的结果再继续和下一个元素做累计运算,返回最终的结果。举个例子,你要将一个列表中的所有元素相加,返回所有元素之和:

>>> from functools import reduce
>>> def add(a, b):
            return a + b

>>> reduce(add, [1, 2 ,3, 4])
10
例子1 将整数序列变成整数
>> from functools import reduce
>>> def func(x, y):
 return x * 10 + y

>>> reduce(func,[1,2,3,4,5,6])
123456
>>> 
例子2 将整数字符串变成整数
>>> from functools import reduce
>>> def func(x, y):
 return x * 10 + y

>>> def char2num(s):
 return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]

>>> reduce(func,map(char2num,'12345'))
12345

封装一下

>>> def str2int(s):
 def func(x, y):
 return x * 10 + y
 def char2num(s):
 return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
 return reduce(func,map(char2num,s))

>>> str2int('12345')
12345
>>> 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容