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函数的简要介绍,我们利用这两个函数可以轻松实现遍历和迭代。赶快用起来吧~