Python-3.12.0文档解读-内置函数map()详细说明+记忆策略+常用场景+巧妙用法+综合技巧


一个认为一切根源都是“自己不够强”的INTJ

个人主页:用哲学编程-CSDN博客
专栏:每日一题——举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

目录

详细说明

map(function, iterable, *iterables)

参数

返回值

示例

注意事项

参考

记忆策略

字面含义联想:

使用场景联想:

常用场景

1. 将列表中的每个数字平方

详细说明:

2. 将字符串列表中的每个字符串转换为大写

详细说明:

3. 将两个列表中的对应元素相加

详细说明:

4. 使用现有函数将列表中的每个数字转换为字符串

详细说明:

5. 处理字典列表,提取特定键的值

详细说明:

巧妙用法

1. 处理嵌套列表

示例:对嵌套列表的每个元素取平方

2. 使用 map 和 str.join 连接字符串列表

示例:将多个字符串列表连接成一个字符串

3. 使用 map 结合 itertools.cycle 实现循环操作

示例:将数字列表循环3次

4. 使用 map 结合 itertools.starmap 进行多参数函数调用

示例:对两个数字列表进行元素间的乘法运算

5. 组合 map 和 filter 进行复杂的数据操作

示例:过滤出偶数并将其平方

综合技巧

1. 使用 map 和 itertools.chain 展平嵌套列表

示例:展平嵌套列表

2. 使用 map 和 itertools.groupby 分组并处理数据

示例:按偶数和奇数分组并计算每组的平方和

3. 使用 map 和 collections.Counter 统计词频并格式化输出

示例:统计单词频率并格式化为字符串

4. 使用 map 和 functools.reduce 实现复杂的累积操作

示例:将列表中的数字平方后累加

5. 使用 map 和 filter 结合生成复杂的数据处理流水线

示例:过滤出大于10的数字并计算其平方根


详细说明

map(function, iterable, *iterables)

map 函数用于将指定的函数 function 应用于给定的可迭代对象 iterable 的每一个元素,并返回一个包含结果的迭代器。如果提供了额外的可迭代对象 *iterables,则 function 必须接受相同数量的参数,并且会并行地从所有可迭代对象中获取元素,依次将这些元素作为参数传递给 function。

参数

  • function: 一个函数,该函数将被应用于每个可迭代对象的元素。这个函数可以接收一个或多个参数,具体取决于传递给 map 函数的可迭代对象的数量。
  • iterable: 一个可迭代对象,包含要处理的元素(例如列表、元组或字符串)。
  • *iterables: 可选的其他可迭代对象。如果提供多个可迭代对象,function 将并行地从这些可迭代对象中取出元素并将其传递给 function 进行处理。

返回值

map 函数返回一个迭代器,该迭代器生成 function 应用于每个输入元素后的结果。如果有多个可迭代对象,迭代器将在最短的可迭代对象耗尽时停止。

示例

  1. 只有一个可迭代对象的情况:

# 示例:将一个列表中的每个元素平方
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # 输出: [1, 4, 9, 16, 25]
  1. 多个可迭代对象的情况:

# 示例:将两个列表中的对应元素相加
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
summed = map(lambda x, y: x + y, numbers1, numbers2)
print(list(summed))  # 输出: [5, 7, 9]
  1. 使用不同长度的可迭代对象:

# 示例:当一个可迭代对象比另一个短时
numbers1 = [1, 2, 3]
numbers2 = [4, 5]
summed = map(lambda x, y: x + y, numbers1, numbers2)
print(list(summed))  # 输出: [5, 7],迭代在较短的可迭代对象耗尽时停止
注意事项
  • map 函数返回的是一个迭代器,而不是列表。如果需要获得列表,可以使用 list() 函数将结果转换为列表。
  • 当有多个可迭代对象时,function 的参数数量必须与可迭代对象的数量相同。
  • 如果需要将一个接受元组作为参数的函数应用于可迭代对象,可以使用 itertools.starmap() 函数。
参考

对于需要将元组作为参数传递给函数的情况,您可以参考 itertools.starmap() 函数。itertools.starmap() 是 map 的变体,适用于函数的输入参数已经被打包成元组的情况。


记忆策略

字面含义联想:

map 这个单词在英语中有“映射”的意思。将这个意思联想为“将一个函数映射到可迭代对象的每一个元素上”,这正是 map 函数的作用。

使用场景联想:

想象在编程中需要对列表中的每个元素进行某种操作,比如将每个数平方、将每个字符串转换为大写等。此时你需要一个工具来逐个处理这些元素,而这个工具就是 map 函数。


常用场景

好的,以下是 map 函数的几个常用且实用的使用场景,每个示例都附有详细的注释说明:

1. 将列表中的每个数字平方

# 示例列表
numbers = [1, 2, 3, 4, 5]# 使用 map 函数将每个数字平方
squared = map(lambda x: x**2, numbers)# 将 map 对象转换为列表以便查看结果
squared_list = list(squared)# 打印结果
print(squared_list)  # 输出: [1, 4, 9, 16, 25]
详细说明:
  1. 定义一个包含数字的列表 numbers。
  2. 使用 map 函数和匿名函数 lambda 将每个数字平方。
  3. 将 map 对象转换为列表 squared_list,以便打印和查看结果。

2. 将字符串列表中的每个字符串转换为大写

# 示例字符串列表
strings = ["hello", "world", "python"]# 使用 map 函数将每个字符串转换为大写
uppercased = map(str.upper, strings)# 将 map 对象转换为列表以便查看结果
uppercased_list = list(uppercased)# 打印结果
print(uppercased_list)  # 输出: ['HELLO', 'WORLD', 'PYTHON']
详细说明:
  1. 定义一个包含字符串的列表 strings。
  2. 使用 map 函数和字符串方法 str.upper 将每个字符串转换为大写。
  3. 将 map 对象转换为列表 uppercased_list,以便打印和查看结果。

3. 将两个列表中的对应元素相加

# 示例列表
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]# 使用 map 函数将两个列表中的对应元素相加
summed = map(lambda x, y: x + y, numbers1, numbers2)# 将 map 对象转换为列表以便查看结果
summed_list = list(summed)# 打印结果
print(summed_list)  # 输出: [5, 7, 9]
详细说明:
  1. 定义两个包含数字的列表 numbers1 和 numbers2。
  2. 使用 map 函数和匿名函数 lambda 将两个列表中的对应元素相加。
  3. 将 map 对象转换为列表 summed_list,以便打印和查看结果。

4. 使用现有函数将列表中的每个数字转换为字符串

# 示例列表
numbers = [1, 2, 3, 4, 5]# 使用 map 函数和内置函数 str 将每个数字转换为字符串
str_numbers = map(str, numbers)# 将 map 对象转换为列表以便查看结果
str_numbers_list = list(str_numbers)# 打印结果
print(str_numbers_list)  # 输出: ['1', '2', '3', '4', '5']
详细说明:
  1. 定义一个包含数字的列表 numbers。
  2. 使用 map 函数和内置函数 str 将每个数字转换为字符串。
  3. 将 map 对象转换为列表 str_numbers_list,以便打印和查看结果。

5. 处理字典列表,提取特定键的值

# 示例字典列表
students = [{"name": "Alice", "age": 24},{"name": "Bob", "age": 22},{"name": "Charlie", "age": 23}
]# 使用 map 函数提取每个字典中的 "name" 键的值
names = map(lambda student: student["name"], students)# 将 map 对象转换为列表以便查看结果
names_list = list(names)# 打印结果
print(names_list)  # 输出: ['Alice', 'Bob', 'Charlie']
详细说明:
  1. 定义一个包含学生信息的字典列表 students。
  2. 使用 map 函数和匿名函数 lambda 提取每个字典中的 "name" 键的值。
  3. 将 map 对象转换为列表 names_list,以便打印和查看结果。

这些示例展示了 map 函数在不同场景中的强大和灵活性。通过这些详细的示例和注释,可以更好地理解和记住 map 函数的用法。


巧妙用法

1. 处理嵌套列表

使用 map 函数对嵌套列表进行操作,可以避免使用嵌套的循环。例如,我们可以用 map 函数对多维列表中的每个元素进行操作。

示例:对嵌套列表的每个元素取平方

# 示例嵌套列表
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 使用 map 函数对嵌套列表的每个元素平方
squared_nested_list = map(lambda sublist: list(map(lambda x: x**2, sublist)), nested_list)# 将结果转换为列表以便查看
result = list(squared_nested_list)# 打印结果
print(result)  # 输出: [[1, 4, 9], [16, 25, 36], [49, 64, 81]]

2. 使用 map 和 str.join 连接字符串列表

通过结合 map 和 str.join,可以对字符串列表进行高效连接操作,避免使用显式的循环。

示例:将多个字符串列表连接成一个字符串

# 示例字符串列表
words_list = [["Hello", "world"], ["Python", "is", "awesome"], ["Map", "function"]]# 使用 map 和 str.join 将每个字符串列表连接成一个字符串
joined_strings = map(" ".join, words_list)# 将结果转换为列表以便查看
result = list(joined_strings)# 打印结果
print(result)  # 输出: ['Hello world', 'Python is awesome', 'Map function']

3. 使用 map 结合 itertools.cycle 实现循环操作

使用 map 和 itertools.cycle 可以对一个列表进行循环操作,直到达到指定次数。

示例:将数字列表循环3次

import itertools# 示例数字列表
numbers = [1, 2, 3]# 使用 map 和 itertools.cycle 实现循环操作
cycled_numbers = map(lambda x: x, itertools.cycle(numbers))# 将结果转换为列表并切片以便只取前9个元素
result = list(itertools.islice(cycled_numbers, 9))# 打印结果
print(result)  # 输出: [1, 2, 3, 1, 2, 3, 1, 2, 3]

4. 使用 map 结合 itertools.starmap 进行多参数函数调用

在某些情况下,我们需要对多个参数的函数进行映射操作,这时可以结合 map 和 itertools.starmap 使用。

示例:对两个数字列表进行元素间的乘法运算

import itertools# 示例数字列表
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]# 使用 zip 将两个列表打包成元组的迭代器
zipped_lists = zip(numbers1, numbers2)# 使用 itertools.starmap 对打包后的元组进行多参数函数调用
multiplied = itertools.starmap(lambda x, y: x * y, zipped_lists)# 将结果转换为列表以便查看
result = list(multiplied)# 打印结果
print(result)  # 输出: [4, 10, 18]

5. 组合 map 和 filter 进行复杂的数据操作

我们可以将 map 和 filter 结合起来,先进行过滤操作,再进行映射操作,或者反之。

示例:过滤出偶数并将其平方
# 示例数字列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 先过滤出偶数,再将其平方
filtered_and_squared = map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers))# 将结果转换为列表以便查看
result = list(filtered_and_squared)# 打印结果
print(result)  # 输出: [4, 16, 36, 64, 100]

这些技巧展示了 map 函数在更加高级和复杂的场景中的应用,充分发挥了 Python 函数式编程的灵活性和强大功能。通过这些技巧,可以更高效地处理数据并简化代码逻辑。


综合技巧

组合使用 map 函数与其他函数或方法可以创造一些非常巧妙的用法,下面列出几个结合使用 map 和其他函数的高级技巧,每个示例都包含详细注释:

1. 使用 map 和 itertools.chain 展平嵌套列表

itertools.chain 可以将多个可迭代对象串联起来,结合 map 可以用于展平嵌套列表。

示例:展平嵌套列表

import itertools# 示例嵌套列表
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 使用 map 和 itertools.chain 将嵌套列表展平
flattened = itertools.chain.from_iterable(map(lambda x: x, nested_list))# 将结果转换为列表以便查看
result = list(flattened)# 打印结果
print(result)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

2. 使用 map 和 itertools.groupby 分组并处理数据

itertools.groupby 可以对数据进行分组,结合 map 可以对每个分组进行处理。

示例:按偶数和奇数分组并计算每组的平方和

import itertools# 示例数字列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 排序以确保 groupby 正常工作
numbers.sort(key=lambda x: x % 2)# 使用 itertools.groupby 进行分组
grouped = itertools.groupby(numbers, key=lambda x: x % 2)# 计算每组的平方和
squared_sums = map(lambda group: sum(map(lambda x: x**2, group[1])), grouped)# 将结果转换为列表以便查看
result = list(squared_sums)# 打印结果
print(result)  # 输出: [165, 120]

3. 使用 map 和 collections.Counter 统计词频并格式化输出

collections.Counter 可以轻松统计词频,结合 map 可以格式化输出结果。

示例:统计单词频率并格式化为字符串

from collections import Counter# 示例字符串
text = "hello world hello python hello code"# 使用 Counter 统计单词频率
word_counts = Counter(text.split())# 使用 map 格式化输出
formatted_counts = map(lambda item: f"{item[0]}: {item[1]}", word_counts.items())# 将结果转换为列表以便查看
result = list(formatted_counts)# 打印结果
print(result)  # 输出: ['hello: 3', 'world: 1', 'python: 1', 'code: 1']

4. 使用 map 和 functools.reduce 实现复杂的累积操作

functools.reduce 可以用于累积操作,结合 map 可以实现更复杂的数据处理流程。

示例:将列表中的数字平方后累加

from functools import reduce# 示例数字列表
numbers = [1, 2, 3, 4, 5]# 使用 map 将每个数字平方
squared_numbers = map(lambda x: x**2, numbers)# 使用 reduce 将平方后的数字累加
sum_of_squares = reduce(lambda x, y: x + y, squared_numbers)# 打印结果
print(sum_of_squares)  # 输出: 55

5. 使用 map 和 filter 结合生成复杂的数据处理流水线

通过结合 map 和 filter,可以创建一个数据处理流水线,先过滤数据,再进行映射操作。

示例:过滤出大于10的数字并计算其平方根
import math# 示例数字列表
numbers = [4, 16, 25, 1, 9, 36, 49]# 使用 filter 过滤出大于10的数字
filtered_numbers = filter(lambda x: x > 10, numbers)# 使用 map 计算每个剩余数字的平方根
square_roots = map(math.sqrt, filtered_numbers)# 将结果转换为列表以便查看
result = list(square_roots)# 打印结果
print(result)  # 输出: [4.0, 5.0, 6.0, 7.0]

这些示例展示了如何结合使用 map 函数与其他强大的 Python 库和函数来实现巧妙的数据处理和操作。通过这些技巧,可以创建更高效、更简洁的代码,同时也能更好地理解函数式编程的优势。


感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何让大模型更聪明?提升AI智能的关键策略

如何让大模型更聪明?提升AI智能的关键策略 🤖 如何让大模型更聪明?提升AI智能的关键策略摘要引言方向一:算法创新🚀1.1 自监督学习的崛起1.2 强化学习的应用 方向二:数据质量与多样性📊2.1 数据…

乡村振兴的乡村公共服务提升:提升乡村公共服务水平,满足农民多样化需求,构建幸福美好的美丽乡村

目录 一、引言 二、乡村公共服务提升的必要性 (一)满足农民多样化需求 (二)促进乡村经济发展 (三)构建幸福美好的美丽乡村 三、乡村公共服务面临的挑战 (一)基础设施薄弱 &a…

粘土滤镜特效怎么弄?5个简易制作粘土软件一学就会

#是谁把夏天的氛围感拿捏了#,哦~原来是AI粘土特效。 这玩意儿最近在社交媒体上可是火得一塌糊涂,大家都在用它给自己的照片来个大变身,变成那种丑萌丑萌的粘土小人儿。 如果大家也想尝试一下,那就跟着我来看看几款超好用的粘土滤…

基于Django框架的项目搭建后台首页

(1). 创建数据库 osdb 进入MySQL数据库中,创建一个数据库名为:osdb 通过数据表结构来创建数据表: -- 员工信息表 CREATE TABLE user (id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 员工账号id,username varchar(50) DEFAULT NULL C…

MySQL:图文超详细教程MySQL5.7下载与安装

一、前言 MySQL 5.7 是一个重要的数据库管理系统版本,它带来了多项改进和新特性,本文将超详细的带大家手动安装一下MySQL5.7。 二、下载MySQL5.7版本 MySQL5.7安装包 链接:https://pan.baidu.com/s/1lz5rp9PwfyeHzkEfI_lW6A 提取码&#…

图卷积神经网络的简史 及其与卷积神经网络的异同

图卷积神经网络(GCN)已经在处理图结构数据方面取得了巨大的成功。在本小节中,我们将深入探讨图卷积神经网络的起源、发展历程,并提供一个简单的Python代码实现示例,以帮助读者更好地理解这一概念。 图卷积神经网络的简…

c# 贪心算法(Greedy Algo)

贪婪是一种算法范式,它逐步构建解决方案,始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性,则可以使用贪心法解决优化问题: 每一步,我们都可以做出当前看来最好的选择&…

IDEA 2024.1安装与破解

一、下载 官网地址:https://www.jetbrains.com/idea/download/other.html 二、安装 傻瓜式安装即可 三、破解 3.1 破解程序 网站:https://3.jetbra.in/ 3.2 获取激活码 点击*号部分即可复制成功

Vue——开发前的准备和创建一个vue的工程

文章目录 前言安装 Node js1、下载node.js2、安装node.js3、查看是否安装成功 创建 vue 工程Visual Studio Code 配置目录结构 前言 本篇博客主要讲解Vue开发前的环境配置与一些说明。 安装 Node js 环境需要安装配置一个nodejs 的环境。 vue3 最低nodejs 版本要求为 15.0 1…

[图解]产品经理创新模式01物流变成信息流

1 00:00:01,570 --> 00:00:04,120 有了现状的业务序列图 2 00:00:04,960 --> 00:00:08,490 我们就来改进我们的业务序列图了 3 00:00:08,580 --> 00:00:11,010 把我们要做的系统放进去,改进它 4 00:00:13,470 --> 00:00:15,260 怎么改进?…

揭秘OS模块:文件与文件夹的遍历艺术

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、os.listdir():当前目录的扫描者 三、os.walk():文件系…

揭秘!EasyRecovery如何轻松救回你的误删文件?

在数字化的今天,数据就像我们生活和工作的血液,流淌在每一个角落。无论是珍贵的家庭照片,还是关键的工作文件,都离不开数据的支撑。然而,数据丢失的情况时有发生,这可能是由于一次误删,一个系统…

PCL 二维凸包切片法计算树冠体积

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 二维凸包法是先将树冠等间隔分层切片,如图(e)采用二维凸包算法对每层…

FullCalendar日历组件集成实战(7)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

Pip,whl,源码编译安装Python库

pip安装 pip 是 Python 包管理工具,用于安装和管理 Python 包。pip 是 Python 开发中不可或缺的工具,能够帮助开发者轻松地管理项目所需的各种库和依赖。无论是安装新包、升级现有包还是卸载不需要的包,pip 都提供了简单而强大的命令来完成这…

中国改革报是什么级别的报刊?在哪些领域具有较高的影响力?

中国改革报是什么级别的报刊?在哪些领域具有较高的影响力? 《中国改革报》是国家发展和改革委员会主管的全国性综合类报纸。它在经济领域和改革发展方面具有重要的影响力,是传递国家政策、反映改革动态的重要平台。该报对于推动中国的经济改…

Pulsar 社区周报 | No.2024-05-24

“ 各位热爱 Pulsar 的小伙伴们,Pulsar 社区周报更新啦!这里将记录 Pulsar 社区每周的重要更新,每周发布。 ” Pulsar Weekly Merge Stars 感谢以下的小伙伴,感谢你们本周为 Apache Pulsar 做的精彩贡献(排名不分先后&…

C++的数论相关算法

数论是数学的一个分支,主要研究整数的性质和关系。在计算机科学中,数论算法对于密码学、优化问题和算法分析等方面都具有重要作用。C作为一种高效的编程语言,非常适合用来实现这些算法。下面我们将介绍几个C中的数论相关算法,包括…

一篇文章教你入门Python

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…