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 库和函数来实现巧妙的数据处理和操作。通过这些技巧,可以创建更高效、更简洁的代码,同时也能更好地理解函数式编程的优势。


感谢阅读。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构初阶 栈

一. 栈的基本介绍 1. 基本概念 栈是一种线性表 是一种特殊的数据结构 栈顶:进行数据插入和删除操作的一端 另一端叫做栈底 压栈:插入数据叫做压栈 压栈的数据在栈顶 出栈: 栈的删除操作叫做出栈 出栈操作也是在栈顶 栈遵循一个原则 叫做…

NXP i.MX8系列平台开发讲解 - 3.13 Linux 之Audio子系统(二)

专栏文章目录传送门:返回专栏目录 目录 1. Linux ALSA 内核框架 2. Linux ALSA 代码分析 2.1 声卡驱动初始化 2.2 声卡创建注册 2.3 PCM设备创建 3. ALSA ASoC 3.1 Machine 3.2 Platform 3.3 Codec 上一章节,对于Linux Audio子系统有了大概的了解…

58. UE5 RPG AI行为树的装饰器

书接56. UE5 RPG 给敌人添加AI实现跟随玩家,我们实现了AI一些基础设置,并实现了获取敌人附近的玩家实现了跟随功能 接下来,我们将实现区分职业,并根据职业不同设置不同的攻击距离,并且根据职业实现不同的技能施放。 …

【启程Golang之旅】基本变量与类型讲解

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

若依启动run-modules-system.bat报错问题解决方案

在启动run-modules-system.bat时遇到了一些问题,在网上搜索无果后,排查解决完毕 1.启动nacos时,报错如下 Error creating bean with name grpcClusterServer: Invocation of init method failed; nested exception is java.io.IOException: Failed to bind to address 0.0.0.0…

场景题11111

关单操作? 优先考虑定时任务、Redissonredis、RocketMQ延迟消息实现(订单量特别大的时候,不建议使用MQ) 每个订单都有一个消息会增加资源消耗可靠性问题(丢失)大量的无效消息不是所有消息队列都支持一般通…

【JAVA |图书管理系统】JAVA实现图书管理系(附完整代码)

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈 ✨✨ 帅哥美女们,我们共同加油!一起…

行车安全:UWB模块的智能化在车辆安全系统中的作用

随着交通车辆数量的不断增加和道路交通拥堵的加剧,车辆安全问题日益引起人们的关注。在这种背景下,超宽带(UWB)技术作为一种新兴的定位技术,正逐渐应用于车辆安全系统中,为提高车辆行车安全性提供了新的解决…

Day 5:2785. 将字符串中的元音字母排序

Leetcode 2785. 将字符串中的元音字母排序 给你一个下标从 0 开始的字符串 s &#xff0c;将 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它满足&#xff1a; 所有辅音字母都在原来的位置上。更正式的&#xff0c;如果满足 0 < i < s.length 的下标 i 处的 s[i] …

AD23中一些好用的功能

1.关闭在线DRC功能&#xff0c;可以避免布线时候一卡一卡的问题&#xff1a; 取消在线DRC的勾选&#xff1a; 2.AD的在线封装库&#xff0c;非常好用&#xff1a; 如何优雅地服用AD 21的在线元件库 – 吴川斌的博客 (mr-wu.cn) 3.如何恢复Altium Designer23默认窗口布局 打开…

go语言基准测试Benchmark 最佳实践-冒泡排序和快速排序算法基准测试时间复杂度对比

在go语言中Benchmark基准测试( 在后缀为_test.go的文件中&#xff0c;函数原型为 func BenchmarkXxx(b *testing.B) {}的函数 )可以用来帮助我们发现代码的性能和瓶颈&#xff0c; 其最佳实践 应该是我们最常用的 冒泡排序和快速排序的测试了&#xff0c;废话不说&#xff0c;直…

Oracle实践|内置函数之日期与时间函数

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

shell脚本的基础应用

规范脚本的构成 #&#xff01;/bin/bash # 注释信息 可执行的语句 执行脚本的方法 有1.添加x权限 ,绝对路经&#xff0c;或者相对路径2. 使用解释器 不需加x,root...bash...bash..echo 3,用source&#xff0c; 开机root ...bash ...echo bash -x /opt/test01.sh &#xff…

Linux防火墙(以iptables为例)

目录 Linux配置防火墙1. 引言2. 什么是防火墙3. Linux中的防火墙3.1 iptablesiptables命令参数常用方式&#xff1a;3.1.1 安装iptables3.1.2 配置iptables规则3.1.3 示例一&#xff1a;使用iptables配置防火墙规则4. iptables执行过程 Linux配置防火墙 1. 引言 在互联网时代&…

python练习题-反转一个只有三位数的整数

【问题描述】&#xff1a;反转一个只有三位数的整数 [示例]&#xff1a;123 321 完整代码如下&#xff1a; nint(input()) if n<100 or n>999: print("请输入三位数&#xff01;") else: gen%10 shin//10%10 bain//100 m100*ge10*shibai…

Function Calling学习

Function Calling第一篇 Agent&#xff1a;AI 主动提要求Function Calling&#xff1a;AI 要求执行某个函数场景举例&#xff1a;明天上班是否要带伞&#xff1f;AI反过来问你&#xff0c;明天天气怎么样&#xff1f; Function Calling 的基本流程 Function Calling 完整的官…

AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 1、百度文心…

ctfshow web入门 web306--web310源码审计

web306 这和之前的完全不一样了 <?php #error_reporting(0); session_start(); require service.php;$username$_POST[userid]; $userpwd$_POST[userpwd]; $servicenew service();$user$service->login($username,$userpwd); if($user){setcookie(user,base64_encode(…

博客系统多模块开发

创建工程 创建父工程 删除src目录&#xff0c;在pom.xml添加依赖&#xff1a; <!--统一版本 字符编码--><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.b…

gem5模拟器入门(三)——在配置脚本中添加Cache

使用gem5模拟器入门(二)——创建一个简单的配置脚本-CSDN博客配置脚本作为起点,本章将介绍一个更复杂的配置。我们将向系统添加一个缓存层次结构,如下图所示。此外,本章还将介绍如何理解gem5的统计输出,并向您的脚本添加命令行参数。 1.创建Cache对象 我们将使用经典的缓…