Python map() 函数,举例说明

已发表: 2022-08-25

在本教程中,您将学习如何使用Python map() 函数将函数应用于可迭代的所有项。

Python 支持函数式编程范式,允许您以编程方式将任务定义为函数的计算。 您可以将 Python 函数视为对象:一个函数可以将另一个函数作为参数并返回另一个函数。

map()函数接受一个函数作为参数,并允许您将其应用于序列中的所有项目。

在本教程结束时,您将能够使用 Python 的map()函数——重写详细循环和列表推导。 您将编写几个示例来了解使用map()函数的不同方式。

如何将函数应用于 Python 列表的元素

将函数应用于 Python 列表的元素

让我们从一个例子开始我们的讨论。

这里nums是一个数字列表。

 nums = [2,4,3,7]

接下来,考虑函数self_pow() 。 函数self_pow()接受一个数字作为参数,并返回该数字本身的幂次幂:n**n。

在 Python 中,** 是求幂运算符。 a**b 返回 a 的 b 次幂 a b的值。

 def self_pow(n): return n**n

TO-DO :通过将函数self_pow()应用于列表nums中的每个元素来创建一个新列表nums_pow

使用 for 循环

为此,您可以在 Python 中使用 for 循环:

  • 对于nums列表中的每个数字,以num作为参数调用函数self_pow()
  • 将函数调用的结果附加到新列表nums_pow
 nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)

在输出中,每个数字nums都被提升为自身。 nums_pow列表中的元素如下: 2 2 , 4 4 , 3 3 ,7 7

 Output [4, 256, 27, 823543]

使用列表理解

您可以使用列表推导来简洁明了。 从上面的显式 for 循环中,我们可以识别输出表达式和要循环的列表。

python-map-function-motivation

然后我们可以修改通用列表推导表达式:

 new_list = [<output expression> for item in iterable]

生成nums_pow列表的列表推导表达式如下:

 nums_pow = [self_pow(num) for num in nums] print(nums_pow)

正如预期的那样,输出与使用 for 循环的输出相同。

 Output [4, 256, 27, 823543]

您可以使用 Python 的map()函数代替循环和列表推导,其语法简洁,有助于将该函数应用于迭代中的所有项目。 让我们从学习 map 函数的语法开始。

Python map() 函数语法

Python map() 函数语法

使用的一般语法 Python map()函数如下:

 map(function, iterable_1,[iterable_2,...,iterable_n])

map()函数至少接受两个参数,一个函数和一个可迭代的。

在上面的语法中:

  • function表示 Python 函数,或者通常是任何 Python 可调用函数。 这包括用户定义和内置函数、类、实例和类方法等。
  • iterable是任何有效的 Python 可迭代对象,例如列表、元组和字符串。
  • map() 函数将该函数应用于可迭代对象中的每个项目

map() 函数返回什么?

它返回一个地图对象。 然后,您可以使用以下语法将地图对象转换为列表: list(map(function,iterable)).

根据用例,您可以将其转换为 Python 元组。

map() 函数返回什么

现在您已经了解了 Python map()函数的语法,让我们开始编写示例。

您应该使用 Python 3.x 来学习本教程。 否则,您可以在 Geekflare 在线 Python 编辑器中运行代码片段。

如何将 map() 函数与用户定义的函数一起使用

将 map() 函数与用户定义的函数一起使用

#1 。 以前,我们将self_pow()函数应用于nums列表中的每个数字。 在map()函数的语法中,我们可以传入函数self_pow和列表nums作为参数。

注意:您应该只指定函数的名称而不是函数调用。 使用self_pow而不是self_pow()

map()函数返回一个地图对象。

 print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>

然后,我们可以使用 list() 函数将地图对象转换为列表,如下所示。

 nums_pow = list(map(self_pow,nums)) print(nums_pow)

这是nums中的每个num映射到nums_pow列表中的 num num的输出。

 Output [4, 256, 27, 823543]

#2 。 考虑以下将英寸转换为厘米的函数inch_to_cm()1 英寸 = 2.54 厘米

 def inch_to_cm(inch): return inch*2.54

要将inches列表中的英寸值转换为厘米,您可以使用map()函数,如下面的代码单元所示。

 inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)

cms列表包含以厘米表示的英寸值。

 Output [14.0716, 8.636, 2.54, 63.5, 20.828]

如何使用带有内置函数的 map() 函数

使用带有内置函数的 map() 函数

在本节中,我们将学习如何在 Python 中将map()与内置函数一起使用。

#1 。 列表strings是编程语言的列表。 您想创建一个新的列表strings_upper ,其中包含大写的编程语言字符串。

 strings = ['JavaScript','Rust','Python','Go']

内置字符串方法.upper()作用于字符串并返回大写格式的副本。

 strings_upper = list(map(str.upper,strings)) print(strings_upper)

列表strings_upper包括以大写格式格式化的列表strings中的字符串。

 Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2 。 Python 中的内置len()函数将序列作为参数并返回其长度。 要查找strings列表中每个字符串的长度,我们可以使用map()函数并将长度函数应用于每个字符串,如下所示。

 strings_len = list(map(len,strings)) print(strings_len)
 Output [10, 4, 6, 2]

#3 。 您可以将map()函数与元组等其他集合一起使用。

以下示例包含一个元组,其中包含有关卧室数量、面积和房屋所在城市的信息。

在 Python 中, type()函数返回任何 Python 对象的数据类型。 要获取此元组中所有项的数据类型,可以使用map()函数对每个元组项调用type函数。

 house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)

我们已将地图对象转换为元组。 您还可以投射到列表或任何其他集合中。

在下面的输出中,我们看到 2、758.5 和 Bangalore 的数据类型已分别被推断为“int”、“float”和“str”。

 Output (<class 'int'>, <class 'float'>, <class 'str'>)

#4 。 在 Python 中,您可以导入内置模块并使用模块中定义的函数。

要计算nums列表中每个数字的平方根,您可以使用 math 模块中的平方根函数sqrt

 import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
 Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

上面的输出很难解析和遵循。 您可能希望将每个平方根值四舍五入到小数点后两位。

如何在 Python 中对浮点数进行舍入

让我们定义一个函数round_2() ,它接受一个浮点值并将其四舍五入到小数点后两位。

 def round_2(num): return round(num,2)

现在,您可以将map()函数与round_2nums_sqrt列表一起使用。

 nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

您还可以使用嵌套的map()函数,其中内部 map 函数用于计算平方根list nums_sqrt ,而外部 map 函数执行舍入操作。

 nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

上述两种方法的输出是相同的。 但是,您应该确保在嵌套函数时代码可读和可维护,如上所示。

如何在 Lambda 函数中使用 map() 函数

将 map() 函数与 Lambda 函数一起使用

在前面的部分中,您学习了如何将 Python map()函数与内置函数和用户定义函数一起使用。 您现在将学习如何将 map() 函数与 lambda 函数一起使用,这些函数在 Python 中是匿名的。

有时,您将拥有一个函数,其主体仅包含一行代码,并且您可能只需要使用该函数一次,而无需在程序的其他地方引用它。 您可以在 Python 中定义诸如lambda 函数之类的函数。

注意lambda args: expression是使用 Python lambda 函数的通用语法。

#1 。 考虑以下列表strings 。 假设你想得到一个列表strings_rev - 包含每个字符串的反向副本。

 strings = ['JavaScript','Rust','Python','Go']

我们可以使用字符串切片来反转 Python 字符串。

注意:这是字符串切片表达式str[start:stop:step]的概括。

– 如果没有startstop值,则切片从字符串的开头开始并一直延伸到字符串的结尾。
step的负值给出从字符串末尾开始的切片。
– 因此, str[::-1]返回 str 的反向副本。

您可以使用这个 lambda 函数: lambda x:x[::-1]在 map 函数中,如下所示。

 strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)

与其他示例一样,我们将地图对象转换为列表。 在输出中,我们看到列表 strings 中的每个字符串都已反转。

 Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2 。 在上一节中,我们计算了数字列表中每个数字的平方根,然后将每个平方根值四舍五入到小数点后两位。

我们使用函数round_2()来做到这一点。 让我们将round_2()函数重写为 lambda 函数,并将其与下面描述的map()函数一起使用。

 nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)

如下所示,输出与我们使用round_2()函数获得的结果相同。

 Output [5.48, 9.49, 5.83, 6.71, 9.85]

如何使用具有多个可迭代对象的 map() 函数

使用带有多个可迭代对象的 map() 函数

在我们看到的示例中,我们将一个函数应用于恰好一个可迭代的所有项目。

有时,我们可能有接受两个或更多参数的函数。 在这种情况下,每个参数都存储在一个列表或任何类似的集合中。

我们还可以将 Python map() 函数与多个列表一起使用。

#1 考虑以下函数area() ,它接受lengthbreadth作为输入并返回区域length*breadth

 def area(length,breadth): return length*breadth

不同矩形的长度和宽度分别存储在两个单独的列表中, lengthsbreadths

 lengths = [4,8,10,18] breadths = [9,4,6,11]

我们可以使用map()函数通过传入lengthsbreadths列表来对上述列表应用面积函数。

 areas = list(map(area,lengths,breadths)) print(areas)

因为函数区域接受两个参数,所以长度和宽度值分别使用列表lengths breadths

 Output [36, 32, 60, 198]

#2 。 Python 数学模块具有 log 函数,可帮助我们计算数字对任何底数的对数。

注意log(x, base)log x的值返回到由值base指定的基数log base x 。 如果未指定底数,则默认底值为e (log 计算自然对数)。

在这个例子中:

  • 列表x对应于您要为其计算对数的值。
  • base列表包含要在对数计算中使用的所有基值。
 x = [2,6,12,10] base = [2,3,2,5]

我们可以使用 Python map() 函数与math.log 、列表、 xbase来获取新的列表log_x ,如下所示。

 log_x = list(map(math.log,x,base)) print(log_x)

这是输出。

 Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

结论

以下是您在本教程中学到的内容的摘要:

  • Python map() 函数至少接受两个参数:一个函数和一个可迭代对象,语法为map(function, iterable(s))
  • 函数可以是任何有效的 Python 可调用函数。
  • 函数接受k个参数时,将map()函数与函数和每个可迭代的k个参数一起使用。

接下来,学习在 Python 中使用集合。