pyhton中的map/reduce应用

时间:2023-01-10 18:22:39

最近在自学python,写点心得。

参考:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00141861202544241651579c69d4399a9aa135afef28c44000

python中有两个函数比较强大,就是map和reduce。这里面的思想同hadoop中的类似,map是将数据拆散成一个个片段,然后分别在某个函数中执行,而reduce则是二合一二合一式的将分散的数据利用函数规则进行合并。

比如,有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,则可以利用循环写为:

def fn(x):
return x*x
L=[]
for s in [1,2,3,4,5,6,7,8,9]:
L.append(fn(s))
print L

但利用map函数就可以简写为:

def fn(x):
return x*x
print map(fn,[1,2,3,4,5,6,7,8,9])

实现输入名字转为大小写形式,则函数为:

def name(l):
def chan(s):
return s[0].upper()+s[1:].lower()
return map(chan,l)
print name(['adam', 'LISA', 'barT'])

而实现输入list求积则为:

def prod (l):
def com(x,y):
return x*y
return reduce(com,l)
print prod ([1,2,3,4,5,6,7,8,9])

使用时注意拆分和合并的思想

这是一个即拆分又合并的例子,即实现字符转int功能:

def strint(s):
def com(x,y):
return 10*x+y
def change(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(com,map(change,s))
print strint('163902')