python基础----map和reduce

map和reduce

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值