Map简单来说就是:一个映射函数就是对一些独立元素组成的概念上的列表的每一个元素进行指定的操作 Reduce简单来说就是:对一个列表的元素进行适当的合并
举两个小例子: (1)现在有一个python的list假设为A: A = [1,4,2,5,6,8,3],现在需要你对它们进行求和; 当然我们使用简单的sum()就可以搞定,不过我想说的是map和reduce的概念;我们知道求和的话,同时最简单的就是对两个数字进行add,所以可以这样: add(1,add(4,add(2,add(5,add(6,add(8,3))))) 这就是最简单的reduce操作,程序如下:
def add(x,y):
return x+y
reduce(add, [1,4,2,5,6,8,3])
返回29,操作正确
(2)对(1)中的A返回每个元素的平方; 当然你可以类似这样:
A = [1, 4, 3, 5, 6, 8, 3]
B = [x * x for x in A]
完全没问题,但是还可以这样做:
def f(x):
return x*x
map(f,[1, 4, 3, 5, 6, 8, 3])
输出为:[1, 16, 9, 25, 36, 64, 9]
这就是最简单的map的思想啦
将字符串转化为int值,不使用内置的int函数 使用map和reduce的代码如下:
def str2int(s):
def fn(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(fn, map(char2num, s))
思路解析: (1)将获得传入字符串做成一个list; (2)使用map对list中的每个元素进行一一映射; (3)使用reduce进行combine(x*10+y)获得最终的结果值
测试:
>> str2int('1342')
>> 1342
>> str2int('1234567')
>> 1234567