map
是Python中的内置函数,可将函数应用于指定可迭代对象中的所有元素。它使您无需使用循环即可编写简洁的代码。
这是map
函数的一般形式map(function, iterable, ...)
。它接受两个必须的参数。第一个参数是函数,第二个可迭代对象,可迭代对象可以是多个。
function
将会接收可迭代对象iterable
每个元素。你可在函数中对可迭代对象每个元素进行操作。
iterable
一个可迭代的对象。只要继承或者实现iterable
接口的对象都是可迭代的对象。Python中的大多数内置对象,例如列表,字典和元组都是可迭代的。
在Python 3中,map
函数返回长度大小等于传递的可迭代对象的map对象。在python 2中,该函数返回一个列表。
让我们看一个例子,以更好地说明map()
函数的工作方式。 假设我们有一个字符串列表,我们想将列表中的每个元素都转换为大写。
第一种方法是使用传统的for
循环将列表的元素转换成大写的方式。
第二种是使用map
函数,代码将更加简单和灵活。在以下代码的最后一行中,我们使用list
构造函数将返回的map对象转换为列表。
to_upper_case
函数中的s参数是来自可迭代对象的元素,在这个示例中即directions列表的元素。每个元素都会传递到to_upper_case
函数。
def to_upper_case(s):
return s.upper()
directions = ["north", "east", "south", "west"]
directions_upper = map(to_upper_case, directions)
print(list(directions_upper))
如果回调函数很简单,则常用的方式是使用Python lambda函数。lambda函数是一个匿名函数。
directions = ["north", "east", "south", "west"]
directions_upper = map(lambda s: s.upper(), directions)
print(list(directions_upper))
map()
与多个可迭代对象
您可以根据需要将多个的可迭代对象传递给map
函数。回调函数参数的数量必须与可迭代对象的数量相同。
换句话说,就是在使用map
函数迭代或者遍历多个可迭代对象时,会同时遍历多个可迭代的对象。
在提供多个可迭代对象时,多个可跌对象还可以是长度不一致的对象,但是map
函数返回的对象长度等于最短可迭代对象长度。
以下示例显示了如何对两个列表执行按元素乘法。
def multiply(x, y):
return x * y
a = [1, 4, 6]
b = [2, 3, 5]
#a = [1, 4, 6]
#b = [2, 3, 5, 7, 8]
result = map(multiply, a, b)
print(list(result))
在这里解释一下代码,在第一行代码中,定义了一个函数multiply
,它接受两个参数x与y。
在遍历时a
列表的元素将会作为x,b列表的元素将会作为y传入到multiply
函数中。你可在multiply
函数中添加print函数打印x,y
的值。
你可以打开注释的代码,尝试在多个可跌代对象的长度不一致时,map函数返回的对象的长度将会等于,最短的可迭代对象的长度。相同的代码,但使用lambda函数的如下:
a = [1, 4, 6]
b = [2, 3, 5]
#a = [1, 4, 6]
#b = [2, 3, 5, 7, 8]
result = map(lambda x, y: x*y, a, b)
print(list(result))
结论
Python的map()
函数采用一个可迭代的对象以及一个函数,并将该函数应用于可迭代的每个元素。
如果您有任何问题或反馈,请随时发表评论。