python 中map()函数的使用方法(重点),在python中map函数
Python内建了map()和reduce()函数。
让我们先看看地图。map()函数接收两个参数,一个是函数,另一个是Iterable。map将传入函数依次应用于序列的每个元素,并将结果作为新的迭代器返回。
现在,我们用Python代码实现它:
deff(x):returnx*x
.r=map(f,[1,2,3,4,5,6,7,8,9])
列表(r)
[1,4,9,16,25,36,49,64,81]map()传入的第一个参数是f,f是函数对象本身。由于结果R是迭代器,迭代器是惰性序列,让它计算整个序列,通过list()函数返回一个列表。
您可能认为也可以通过编写一个没有map()函数的循环来计算结果:
L=[]fornin[1,2,3,4,5,6,7,8,9]
附加(f(n))
Print(L)确实是可以的,但是你能从上面的循环代码中一眼看出“将f(x)应用到列表的每一个元素,并将结果生成一个新的列表”吗?
所以,map()是一个高阶函数,实际上它抽象了运算规则。因此,我们不仅可以计算简单的f(x)=x2,还可以计算任何复杂的函数,比如把这个列表中的所有数字都变成字符串:
列表(map(str,[1,2,3,4,5,6,7,8,9]))
[1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]只需要一行代码。
看看reduce的用法。Reduce对序列[x1,x2,x3,].这个函数必须接收两个参数。reduce继续计算结果,并对序列的下一个元素进行累积计算。其效果是:
Reduce (f,[x1,x2,x3,x4])=f(f(f(f(x1,x2),x3),x4)比如对一个序列求和,可以用Reduce:
fromfunctoolsimportreduce
defadd(x,y):
returnx y
.
Reduce(add,[1,3,5,7,9])25当然,你可以直接使用Python的内置函数sum()进行求和运算,所以没有必要使用Reduce。
但是如果你想把序列[1,3,5,7,9]转换成整数13579,reduce可以派上用场:
fromfunctoolsimportreduce
deffn(x,y):
.returnx*10 y
.
reduce(fn,[1,3,5,7,9])
这个例子本身并不太有用。但是,如果我们考虑到字符串str也是一个序列,我们可以用map()稍微修改一下上面的例子,编写将str转换为int的函数:
fromfunctoolsimportreduce
deffn(x,y):
.returnx*10 y
.
defchar 2 num :
.digits={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}
.return数字
.
reduce(fn,map(char2num, 13579 ))
3579编译成str2int的作用是:
fromfunctoolsimportreduce
DIGITS={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}defstr2int(s):
deffn(x,y):
returnx * 10 ydefchar 2 num :
Return digits [s] return reduce (fn,map (char2num,s))可以通过lambda函数进一步简化为:
fromfunctoolsimportreduce
DIGITS={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9}defchar2num(s):
return digits defstr 2 int :
Return Reduce (Lambdax,y:x * 10y,map (Char2num,s))也就是说,假设Python不提供int()函数,你可以自己写一个把字符串转换成整数的函数,而且只需要几行代码。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。