当前位置: 首页 > 图灵资讯 > 行业资讯> 详解Python内建函数map()和reduce()

详解Python内建函数map()和reduce()

发布时间:2025-09-23 10:55:02

map()和reduce()函数建在Python内。

先看map。map()函数接收两个参数,一个是函数,另一个是Iterable。map依次将传入的函数作用到序列中的每个元素,并将结果作为新的Iterator返回。

现在,我们使用Python代码来实现:

>>>deff(x):...returnx*x
...>>>r=map(f,[1、2、3、4、5、6、7、8、9]
>>>list(r)
[1,4,9,16,25,36,49,64

map()输入的第一个参数是f,即函数对象本身。因为结果r是Iterator,Iterator是惰性序列,所以通过list()函数计算整个序列并返回list。

您可能会认为,不需要map()函数,也可以通过编写循环来计算结果:

L=[]fornin[1,2,3,4,5,6,7,8]:
L.append(f(n))
print(L)

是的,但是,从上面的循环代码可以一眼看出“f”(x)作用于list的每一个元素,并将结果生成新的list吗?

所以,map()作为一个高级函数,它实际上抽象了操作规则,所以我们不仅可以计算简单的f(x)=x2还可以计算任何复杂的函数,例如,将list的所有数字转换为字符串:

>>>list(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(X1,X2),X3),X4)

例如,对于一个序列求和,可以通过reduce来实现:

>>>fromfunctoolsimportreduce
>>>defadd(x,y):...
returnx+y
...
>>>reduce(add,255[1,3,5,7,9]

当然,求和操作可以直接使用Python内建函数sum(),不需要使用reduce。

但如果要把序列[1, 3, 5, 7, 9]转换为整数13579,reduce可以派上用场:

>>>fromfunctoolsimportreduce
>>>deffn(x,y):
...returnx*10+y
...
>>>reduce(fn,[1,3,5,7,9]
13579

这个例子本身没有多大用处,但是,如果考虑到字符串str也是一个序列,我们可以用map()写一个函数,将str转换为int:

>>>fromfunctoolsimportreduce
>>>deffn(x,y):
...returnx*10+y
...
>>>defchar2num(s):
...digits={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
...returndigits[s]
...
>>>reduce(fn,map(char2num,'13579'))
13579

将其整理成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+ydefchar2num(s):
returnDIGITS[s]returnreduce(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):
returnDIGITS[s]defstr2int(s):
returnreduce(lambdax,y:x*10+y,map(char2num,s))

也就是说,如果Python没有提供int()函数,你可以写一个函数,将字符串转换为整数,只需要几行代码。

相关文章

Python中reduce函数和lambda表达式的学习

Python中reduce函数和lambda表达式的学习

2025-09-25
Python小白必学的面向对象

Python小白必学的面向对象

2025-09-25
一个例子解释python装饰器

一个例子解释python装饰器

2025-09-25
深入理解Python的set和dict

深入理解Python的set和dict

2025-09-25
Python中正则表达式的巧妙使用

Python中正则表达式的巧妙使用

2025-09-25
5分钟搞定Python中函数的参数

5分钟搞定Python中函数的参数

2025-09-25