map
map
接收两个参数,一个函数,一个Iterable
. map
就是将传入的函数依次作用到序列的每个元素,然后返回一个Iterator
。请记住,不用管后面传进去的是什么东西,只要是个Iterable
,map
就能返回处理后的Iterator
。Iterator
是一个惰性序列,用到的时候才计算。
def str2num(s):
DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return DIGITS[s]
l1 = list(map(str2num,['1','2','3','4','5']))
l2 = list(map(str2num,'12345'))
l3 = list(map(str2num,('1','2','3','4','5')))
print(l1)
print(l2)
print(l3)
请注意,单个元素是什么东西,处理的就是什么东西。
reduce
reduce
的两个参数,一个接收两个参数的函数,一个是Iterable
。reduce
函数首次取Iterable
的前两个元素进行处理,返回一个结果。之后是将此结果和Iterable
剩余元素的首元素同时传入函数进行处理。reduce
返回一个具体的结果。与map
类似,reduce
也不关心你传进去的是什么东西,给他什么东西,他就按什么东西进行运算。
from functools import reduce
def h(x,y):
return 10*x + y
r1 = reduce(h,'12')
r2 = reduce(h,(1,2,3))
r3 = reduce(h,[1,2,3])
print(r1,r2,r3)
字符串转化为整数:
from functools import reduce
def h(x,y):
return 10*x + y
#map将字符串转换成数字序列 reduce把数字序列给转化成数
def str2num(s):
DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return DIGITS[s]
r1 = reduce(h,map(str2num,'12345'))
r2 = reduce(h,list(map(str2num,'12345')))
r3 = reduce(h,tuple(map(str2num,'12345')))
print(r1,r2,r3)
#这再一次验证了,reduce和map的第二个参数只要是一个Iterable就OK了。