map和reduce函数简介
Python有许多强大好用的内置函数,今天小编将带领大家继续了解两个关于遍历和迭代的函数。
一、map
map函数会根据提供的函数对指定序列做映射。其语法为:map(function, iterable)。也就是对iterable中的每一个元素进行function的运算,并返回一个迭代器。
1.第一个例子
我们想要实现这样一个目的:判断一个数是奇数还是偶数,并返回一个列表,列表中包含判断结果。
1.1使用map函数
首先我们定义一个函数用于判断并返回结果,接下来我们取1-5这5个数代入。
def f1(n):
if n%2==0:
return f'{n} is even.'
else: return f'{n} is odd.'
print(map(f1,range(1,6)))
结果是:
<map object at 0x00000178550186A0>
说明,我们使用map函数得到的是一个map对象,没办法得到其中的内容,我们查看它的type。
print(type(map(f1,range(1,6))))
结果是:
<class 'map'>
因此我们将结果放在一个列表中,打印出来。
print(list(map(f1,range(1,6))))
结果是:
['1 is odd.', '2 is even.', '3 is odd.', '4 is even.', '5 is odd.']
所以,为了实现以上目的,我们首先定义了f1,之后使用一行代码,就可以得到目标list了。
1.2不使用map函数
如果我们没有使用map函数,该如何实现呢?可以考虑使用for循环进行遍历。
list1=[]
for num in range(1,6):
if num%2==0:
list1.append(f'{num} is even.')
else:list1.append(f'{num} is odd.')
print(list1)
#同样得到结果:
['1 is odd.', '2 is even.', '3 is odd.', '4 is even.', '5 is odd.']
可以看出,我们使用map函数避免了定义空列表、将内容append进入列表、定义for循环的过程,大大减少了代码量,提升了可读性。
2.第二个例子
上一个例子中我们对列表进行map函数的应用,这一个例子我们将对str对象进行map函数的使用。我们想提取出列表中的人名,并且将不规范的人名变成首字母大写,其余字母小写。
初始列表如下:
list2=['beCky:2333','LISa:1234','tOMY:2580']
2.1使用map函数
我们定义f2函数,观察初始列表,我们想要获取人名,则可以先将每个元素按照“:”分割,然后取第0个元素。我们想要将人名规范化,可以使用str中的capitalize函数,用于使首字母大写、其余字母小写。
def f2(n):
return str.capitalize(n.split(':')[0])
print(map(f2,list2))
print(type(map(f2,list2)))
结果是:
<map object at 0x00000178550188D0>
<class 'map'>
我们得到的是一个迭代器,为了拿到每一个内容,我们使用for进行遍历。
for name in map(f2,list2):
print(name)
结果是:
Becky
Lisa
Tomy
2.2不使用map函数
for i in list2:
print(str.capitalize(i.split(':')[0]))
同样得到结果:
Becky
Lisa
Tomy
可以看出,map函数得到的是一个迭代器(一个对象),想要获取迭代器中的每一个内容,可以使用for循环遍历;此时不使用map函数也能实现,直接使用for循环,得到的是多个单个元素的内容(多个对象)。
二、reduce
reduce函数是对参数序列中的元素进行累积。对于一个参数序列,先对第1、2个元素进行操作,得到的结果再与第3个元素进行操作,最终得到一个结果。其语法是:reduce(function, iterable[, initializer]),其中,function是函数,它有两个参数,iterable是可迭代对象,intializer是初始参数,可以省略。
我们调用reduce函数需要从functools库中导入
from functools import reduce
1.第一个例子
我们把1-5这五个数变成一个数:‘12345’.
def f3(x,y):
return x*10+y
print(reduce(f3,range(1,6)))
结果是:
12345
此处我们来看一下实现过程。
如果我们加入一个初始参数,则
print(reduce(f3,range(1,6),30))
结果如下:
3012345
实现过程变成了:
此时的初始参数30,会作为第一个x进入function。
2.第二个例子
我们实现一个str的逆向输出
def f4(x,y):
return y+x
print(reduce(f4,'becky'))
结果为:
ykceb
如果我们定义一个初始参数
def f5(x,y):
return y+x
print(reduce(f5,'becky','lisa'))
结果变为:
ykceblisa
其实现过程为:
最后输出就是**‘ykceblisa’**
以上就是map和reduce函数的简要介绍,我们利用这两个函数可以轻松实现遍历和迭代。赶快用起来吧~