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

news2024/11/19 18:20:40


一个认为一切根源都是“自己不够强”的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.coloradmin.cn/o/1707557.html

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

相关文章

CHI Read传输——CHI(3)

目录 一、Read操作概览 二、DMT(Direct Memory Transfer) 三、DCT (Direct Cache Transfer) 四、without Direct Data Transfer 五、ReadNoSnp and ReadOnce* structure with DMT 本篇我们来介绍一下CHI传输类型中的Read 一、Read操作概览 read操作有以下几种&#xff1…

自适应星空背景个人导航单页(附带源码)

自适应星空背景个人导航单页 效果图部分源码领取源码下期更新预报 效果图 部分源码 function Star(id, x, y) {this.id id;this.x x;this.y y;this.r Math.floor(Math.random() * 2) 1;var alpha (Math.floor(Math.random() * 10) 1) / 10 / 2;this.color "rgba(…

QColor官网文档简介

颜色可以用不同的模型来进行表示,常见的有RGB,HSV或者CMYK.QColor基于RGB值创建颜色,如果要转接到HSV或者CMYK需要使用转接函数toHsv() toCmyk() 返回期望格式的副本 get...和set...函数具体参见文档用isValid()检查RGB颜色是否合法颜色组成部分可以单独检索QRgb是一种无符号整…

第98天:权限提升-WIN 全平台MSF 自动化CS 插件化EXP 筛选溢出漏洞

目录 思维导图 前置知识 案例一: Web&Win2008-人工手动&全自动msf-筛选&下载&利用 手动 全自动msf 案例二: Web&Win2019-CS 半自动-反弹&插件&利用 思维导图 前置知识 提权方式,这里讲的是溢出漏洞 windows权限 常…

⌈ 传知代码 ⌋ 高速公路车辆速度检测软件

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

C++学习/复习8--STL简介/六大组件/缺陷

一、STL简介 二、六大组件 三、面试题 四、STL缺陷

实现按块复制元素的进阶技巧

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、按块复制元素的重要性 二、使用LED模块创建数组并复制 三、实现按块复制的具体步骤 四…

粤嵌—2024/5/28—最大正方形(✔)

代码实现&#xff1a; 方法一&#xff1a;模拟——超时 int maximalSquare(char **matrix, int matrixSize, int *matrixColSize) {int maxSide 0;if (matrix NULL || matrixColSize NULL || matrixSize < 0 || matrixColSize[0] < 0) {return 0;}for (int i 0; i &l…

Cesium For Unity 在Unity中无法下载的问题

Unity 下载失败&#xff0c;提供百度网盘“com.cesium.unity-1.10.0.tgz”下载链接 链接&#xff1a;https://pan.baidu.com/s/1PybXQ8EvkRofOKD6rSN66g?pwd1234 提取码&#xff1a;1234 导入方法&#xff1a; 1.打开PackageManager;Window-PackageManager 2.在PackageMan…

Golang | Leetcode Golang题解之第104题二叉树的最大深度

题目&#xff1a; 题解&#xff1a; func maxDepth(root *TreeNode) int {if root nil {return 0}queue : []*TreeNode{}queue append(queue, root)ans : 0for len(queue) > 0 {sz : len(queue)for sz > 0 {node : queue[0]queue queue[1:]if node.Left ! nil {queue…

酒店报修进入智能时代:无纸化系统的全面革新

在这个信息爆炸的时代&#xff0c;面对酒店的设备故障你还在用纸质工单来报修吗&#xff1f;那简直像是石器时代的遗风&#xff01;一场酒店服务的革命性变革正在悄然兴起&#xff0c;它将彻底颠覆你对传统报修方式的认知。想象一下&#xff0c;当客人在房间遇到水龙头漏水&…

使用大模型LLM实现销售AI

想象一个场景&#xff0c;客户通过聊天窗口咨询一款产品。销售AI首先使用LLM解析客户的问题&#xff0c;然后通过智能代理查询数据库获取产品详细信息&#xff0c;并以自然而友好的方式回应客户。 在对话过程中&#xff0c;AI可以评估客户的兴趣&#xff0c;并主动提供促销信息…

太极图形学——渲染——光线追踪概念部分

程序动画和渲染 程序动画和渲染有一些类似的地方&#xff0c;都是找到合适的像素并填上颜色&#xff0c;但是要把一个图片渲染的好看是有一些规则来指导的 光线追踪包含哪些呢 果壳中的光线追踪器 实时条件下的光线追踪&#xff1a;需要进行光栅化的处理 离线条件下做cg的话…

Hololens 2 新建自定义按钮

官方链接地址 1、创建Cube 2、添加PressableButton脚本&#xff0c;并点击AddNearin… 3、把Cube拖入到MovingButtonVisuals变量中 4、点击NearInteractionTouchable组件&#xff08;这个组件是添加和上一个脚本绑定的&#xff0c;自动添加上来的&#xff09;上的Fix… 5、…

探索无限乐趣,尽在淘宝扭蛋机小程序

随着科技的快速发展和人们消费习惯的不断改变&#xff0c;小程序已经成为我们日常生活中不可或缺的一部分。为了满足广大用户对新鲜、有趣、互动性强的购物体验的追求&#xff0c;淘宝特别推出了全新的扭蛋机小程序&#xff0c;让您在购物的同时&#xff0c;也能享受到扭蛋带来…

4步成功将三方库——speexdsp移植到OpenHarmony

四步实现三方库移植&#xff1a; 1、在Linux下编译要移植的三仓库&#xff0c;分析编译过程&#xff1b; 2、将要移植的三方库加入编译框架中以及产品引用&#xff1b; 3、增量编译出动态链接库和可执行文件推送到开发板上&#xff1b; 4、在开发板上验证移植是否成功、API接口…

【qt】QTableWidget 表格组件

QTableWidget 表格组件 一.应用场景二.初始化表格1.界面拖放2.设置列数3.表头的处理①&#xff1a;表头装的是啥②&#xff1a;设置为标头③&#xff1a;设置列宽的模式 4.设置行数5.添加每个单元格①&#xff1a;设置单元格信息②&#xff1a;添加单元格③&#xff1a;单元格附…

P148--章节作业1

编辑 编辑 public class Main {public static void main(String args[]){double yxq100000;int cishu0;while(true) {if(yxq > 50000) {yxq yxq - yxq * 0.05;cishucishu1;}else if(yxq > 1000){yxq yxq - 1000;cishucishu1;}else{break;}}System.out.print(cishu);} …

安装部署统信UOS服务器操作系统1070e

原文链接&#xff1a;安装部署统信UOS服务器操作系统1070e Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于安装部署统信UOS服务器操作系统1070e的文章。统信UOS是一款基于Linux的国产操作系统&#xff0c;以其安全性和稳定性受到广泛关注。本文将详细介绍如何安…

Android 11 Audio音频系统配置文件解析

在AudioPolicyService的启动过程中&#xff0c;会去创建AudioPolicyManager对象&#xff0c;进而去解析配置文件 //frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientIn…