Python map() 函数,举例说明
已发表: 2022-08-25在本教程中,您将学习如何使用Python map() 函数将函数应用于可迭代的所有项。
Python 支持函数式编程范式,允许您以编程方式将任务定义为函数的计算。 您可以将 Python 函数视为对象:一个函数可以将另一个函数作为参数并返回另一个函数。
map()
函数接受一个函数作为参数,并允许您将其应用于序列中的所有项目。
在本教程结束时,您将能够使用 Python 的map()
函数——重写详细循环和列表推导。 您将编写几个示例来了解使用map()
函数的不同方式。
如何将函数应用于 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 循环中,我们可以识别输出表达式和要循环的列表。

然后我们可以修改通用列表推导表达式:
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()
函数如下:
map(function, iterable_1,[iterable_2,...,iterable_n])
map()
函数至少接受两个参数,一个函数和一个可迭代的。
在上面的语法中:
- function表示 Python 函数,或者通常是任何 Python 可调用函数。 这包括用户定义和内置函数、类、实例和类方法等。
- iterable是任何有效的 Python 可迭代对象,例如列表、元组和字符串。
- map() 函数将该函数应用于可迭代对象中的每个项目
map() 函数返回什么?
它返回一个地图对象。 然后,您可以使用以下语法将地图对象转换为列表: list(map(function,iterable)).
根据用例,您可以将其转换为 Python 元组。

现在您已经了解了 Python map()
函数的语法,让我们开始编写示例。
您应该使用 Python 3.x 来学习本教程。 否则,您可以在 Geekflare 在线 Python 编辑器中运行代码片段。
如何将 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() 函数

在本节中,我们将学习如何在 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_2
和nums_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() 函数

在前面的部分中,您学习了如何将 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]
的概括。– 如果没有
start
和stop
值,则切片从字符串的开头开始并一直延伸到字符串的结尾。
–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() 函数

在我们看到的示例中,我们将一个函数应用于恰好一个可迭代的所有项目。
有时,我们可能有接受两个或更多参数的函数。 在这种情况下,每个参数都存储在一个列表或任何类似的集合中。
我们还可以将 Python map() 函数与多个列表一起使用。
#1 。 考虑以下函数area()
,它接受length
和breadth
作为输入并返回区域length*breadth
。
def area(length,breadth): return length*breadth
不同矩形的长度和宽度分别存储在两个单独的列表中, lengths
和breadths
。
lengths = [4,8,10,18] breadths = [9,4,6,11]
我们可以使用map()
函数通过传入lengths
和breadths
列表来对上述列表应用面积函数。
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
、列表、 x
和base
来获取新的列表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 中使用集合。