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()函数采用一个可迭代的对象以及一个函数,并将该函数应用于可迭代的每个元素。

如果您有任何问题或反馈,请随时发表评论。