了解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
>>>
网友评论