Python map() 函数及其示例

⚡ 智能摘要

Python `map()` 函数会将给定的函数应用于可迭代对象(例如列表、元组、集合、字典或字符串)中的每个元素。它返回一个惰性映射对象,你可以使用 `list()` 函数将其转换为列表,或者使用循环遍历该对象。

  • 🔢 语法: map() 接受一个函数以及一个或多个可迭代对象,并将该函数应用于每个元素。
  • 🔁 返回值: map() 返回一个惰性映射对象,因此需要将其包装在 list()、tuple() 或 set() 中才能查看结果。
  • 🧩 可迭代对象: 列表、元组、集合、字典和字符串都可以作为 map() 的输入。
  • 拉姆达: 将 map() 与 lambda 结合使用,可以避免为简单的转换定义单独的命名函数。
  • 多个可迭代对象: 传递多个可迭代对象会并行地对它们应用该函数,停止ping 最短。
  • 🤖 人工智能辅助: GitHub Copilot 等 AI 助手会生成 map() 调用,而 map 风格的转换会为机器学习中的数据管道提供信息。

Python map() 函数

句法

map(function, iterator1,iterator2 ...iteratorN)

参数

以下是两个重要参数:

  • 功能: 必须传递给 map() 的函数,该函数将应用于迭代器中所有可用的项。
  • 迭代器(iterator): 必须提供一个可迭代对象。它可以是列表、元组等等。你可以将多个迭代器对象传递给 map() 函数。

回报值

map() 函数将给定的函数应用于迭代器中的所有项,并返回一个可迭代的映射对象,即元组、列表等。

map() 函数如何工作?

`map()` 函数接受两个输入:一个函数和一个可迭代对象。传递给 `map()` 的函数是一个普通函数,它会遍历可迭代对象中存在的所有值。

例如,假设您有一个数字列表,并且您想要找到每个数字的平方。

为了得到输出结果,我们需要一个函数来返回给定数字的平方。该函数如下:

def square(n):
	return n*n

我们需要求平方的物品列表如下:

my_list = [2,3,4,5,6,7,8,9]

现在让我们使用 map() 内置函数来获取 my_list 中每个项目的平方。

最终代码如下:

def square(n):
    return n*n
my_list = [2,3,4,5,6,7,8,9]
updated_list = map(square, my_list)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x0000002C59601748>
[4, 9, 16, 25, 36, 49, 64, 81]

如上所示,map() 函数的输出是一个显示在屏幕上的地图对象。 。

你需要使用 for 循环或 list() 方法遍历 map() 的输出才能得到最终结果。我在代码中使用了 list() 来显示给定列表中的值。

因此,使用 map() 函数,我们可以得到每个数字的平方。传递给 map() 的列表是 [2,3,4,5,6,7,8,9],使用 square() 函数,我们得到的输出是 [4, 9, 16, 25, 36, 49, 64, 81]。

`map()` 函数会对列表中的所有元素应用 `square()` 函数。例如,它会获取变量 `my_list`,并用每个数字的平方更新列表。结果存储在变量 `updated_list` 中。

使用 map() Python 内置功能

此 Python map() 函数是一个内置函数,也可以与其他内置函数一起使用 Python在这个例子中,我们将利用…… Python round() 是一个内置函数,用于对给定的值进行四舍五入。

计费示例:

我的列表是 my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]。我需要列表中每个元素的四舍五入值,所以我们将使用 round() 函数来映射 map() 函数。

my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]
updated_list = map(round, my_list)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x000000E65F901748>
[3, 4, 4, 6, 6, 8, 8, 10]

round() 函数应用于列表中的所有项目,并返回一个所有值都经过四舍五入的列表,如输出所示。

使用 map() 和字符串作为迭代器

我们还可以在字符串上使用 map()。在 Python字符串就像数组一样,因此我们可以很容易地在 map() 中使用它。

在这个例子中,我们定义了一个函数 `myMapFunc()`,它负责将给定的字符串转换为大写。`myMapFunc()` 函数被传递给 `map()` 函数。`map()` 函数会将给定的字符串传递给 `myMapFunc()` 函数,从而完成字符串转换为大写的操作。

def myMapFunc(s):
    return s.upper()
my_str = "welcome to guru99 tutorials!"
updated_list = map(myMapFunc, my_str)
print(updated_list)
for i in updated_list:
    print(i, end="")

输出:

<map object at 0x000000DF2E711748>
WELCOME TO GURU99 TUTORIALS!

使用 map() 函数处理列表 Numbers

要在 map() 中处理列表,我们将接受一个数字列表,并将列表中的每个数字乘以 10。

我们将使用的列表是 [2,3,4,5,6,7,8,9]。函数 myMapFunc() 负责将给定的数字乘以 10。该函数与列表一起传递给 map() 函数。

计费示例:

def myMapFunc(n):
    return n*10

my_list = [2,3,4,5,6,7,8,9]

updated_list = map(myMapFunc, my_list)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x000000EE2C061898>
[20, 30, 40, 50, 60, 70, 80, 90]

我们看到的输出结果是,列表中的每个数字都乘以了 10。

将 map() 与 Tuple 结合使用

元组是 Python 它包含以逗号分隔并用圆括号括起来的元素。在本例中,我们将使用一个包含字符串值的元组。我们将使用的函数会将给定的值转换为大写。

计费示例:

def myMapFunc(n):
    return n.upper()

my_tuple = ('php','java','python','c++','c')

updated_list = map(myMapFunc, my_tuple)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x0000009C3C3A16A0>
['PHP', 'JAVA', 'PYTHON', 'C++', 'C']

输出结果是一个元组,其中所有值都已转换为大写。

将 map() 与字典结合使用

A 字典中 Python 字典是用花括号 ({}) 创建的。由于字典本身就是一个迭代器,因此可以在 `map()` 函数中使用它。现在让我们在 `map()` 函数中使用字典作为迭代器。

以下示例展示了 map() 函数内部字典迭代器的工作原理:

def myMapFunc(n):
    return n*10
my_dict = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_dict)
print(finalitems)
print(list(finalitems))

输出:

<map object at 0x0000007EB451DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

将 map() 与 Set 结合使用

一套 Python 是一个用花括号 ({}) 括起来的无序元素集合。由于 set() 也是一个迭代器,因此你可以在 map() 函数中使用它。

以下是一个在 map() 函数中使用集合作为迭代器的示例:

def myMapFunc(n):
    return n*10
my_set = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_set)
print(finalitems)
print(list(finalitems))

输出:

<map object at 0x000000AC8F05DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

将 map() 与 Lambda 函数结合使用

In Python,lambda 表达式用于构造匿名函数。您必须使用 lambda 关键字,就像使用 def 定义普通函数一样。

在这个例子中,我们将在 map() 函数中使用 lambda 函数。lambda 函数会将列表中的每个值乘以 10。

计费示例:

my_list = [2,3,4,5,6,7,8,9]
updated_list = map(lambda x: x * 10, my_list)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x000000BD18B11898>
[20, 30, 40, 50, 60, 70, 80, 90]

在 map() 函数中使用多个迭代器

示例 1:将两个列表迭代器传递给 map()

你可以同时向 map() 函数发送多个迭代器,例如列表、元组等。

例如,如果要将两个列表相加,可以使用 map() 函数来实现。我们将使用两个列表,my_list1 和 my_list2。

在下面的示例中,my_list1 中的第一个元素被添加到 my_list2 的第一个元素中。函数 myMapFunc() 接收 my_list1 和 my_list2 中的元素,并返回两者的总和。

以下是使用 map() 函数将两个给定列表相加的工作示例。

def myMapFunc(list1, list2):
    return list1+list2

my_list1 = [2,3,4,5,6,7,8,9]
my_list2 = [4,8,12,16,20,24,28]

updated_list = map(myMapFunc, my_list1,my_list2)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x0000004D5F751860>
[6, 11, 16, 21, 26, 31, 36]

示例 2:向 map() 传递一个元组和一个列表迭代器

我们将在 `map()` 函数中使用列表和元组迭代器。传递给 `map()` 的函数 `myMapFunc()` 将从列表和元组中获取元素。元素之间将用下划线 (_) 连接。以下是运行示例:

def myMapFunc(list1, tuple1):
    return list1+"_"+tuple1

my_list = ['a','b', 'b', 'd', 'e']
my_tuple = ('PHP','Java','Python','C++','C')

updated_list = map(myMapFunc, my_list,my_tuple)
print(updated_list)
print(list(updated_list))

输出:

<map object at 0x00000059F37BB4E0>
['a_PHP', 'b_Java', 'b_Python', 'd_C++', 'e_C']

常见问题

两者都对每个元素执行操作。列表推导式通常更易读,并直接返回一个列表,而 `map()` 返回一个惰性映射对象,并且在重用现有命名函数时速度更快。

不,map() 函数永远不会改变原始可迭代对象。它会读取每个元素,应用你的函数,并生成一个新的惰性映射对象,而不会触及源列表、元组或字符串。

In Python 3. `map()` 函数是惰性的:它返回一个映射对象,该对象仅在迭代时才计算值。这在处理大型数据时可以节省内存。可以将其包装在 `list()` 函数中或使用循环遍历来获取结果。

`map()` 函数会转换每个元素,`filter()` 函数只保留通过筛选的元素,而 `reduce()` 函数(来自 functools)会将所有元素合并成一个值。它们共同实现了转换、选择和聚合操作。

当可迭代对象长度不同时,map() 函数会停留在最短的那个位置。较长可迭代对象中的额外元素会被忽略,因此不会引发错误,结果与最短的可迭代对象匹配。

不。map 对象是一个迭代器,遍历一次后就会耗尽所有元素。一旦你遍历它或调用 list() 方法,它就为空了。如果需要重复使用,请先将其转换为列表。

在机器学习中,`map()` 函数会对数据集应用预处理函数,例如缩放数值、文本分词或转换特征,然后再进行训练。它提供了一种简洁高效的方式,可以对多个样本执行相同的操作。

是的。GitHub Copilot 可以自动补全 map() 调用,使用正确的函数和可迭代对象,而智能 AI 工具可以将循环重构为 map() 表达式,然后运行测试以确认行为是否保持不变。

总结一下这篇文章: