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,一经查实,立即删除!

相关文章

Java练习1

题目要求 有一个交通工具接口类Vehicles,有work接口有Horse类和Boat类分别实现Vehicles创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat有Person类,有name和Vehicles属性,在构造器中为两个属性赋值实例化Person对象“…

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

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

大模型日报2024-05-26

大模型日报 2024-05-26 大模型资讯 AI助力揭示海洋和肠道中的病毒活动 摘要: 病毒在微生物生态系统中是神秘且难以理解的力量。研究人员发现,病毒可以感染、杀死并操控人类。AI技术有望帮助我们更好地了解这些病毒在海洋和肠道中的行为。 微软推出Windows Copilot R…

Spring:IoC容器(基于XML管理bean)

1. HelloWorld 三个步骤: 1.创建类 2.配置xml文件 3.通过xml文件使得bean实列化 1. 创建类 package com.itgyl.bean;public class HelloWorld {public HelloWorld() {System.out.println("1.通过无参构造创建对象");}public void hello() {System.out.p…

SpringCloud配置文件bootstrap不生效

解决方案&#xff1a; 情况一、SpringBoot 版本 小于 2.4.0 版本&#xff0c;添加以下依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId> </dependency> 情况二、SpringBoot…

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

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

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

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

java处理中文脱敏

方法一&#xff0c;简单的&#xff0c;不计算文字长度去设置脱敏 public static String dataDesensitization1(String content){String regex "(.{2}).*(.{2})";return ReUtil.replaceAll(content, regex, matcher -> {try {if (CharSequenceUtil.isBlank(match…

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

(1). 创建数据库 osdb 进入MySQL数据库中&#xff0c;创建一个数据库名为&#xff1a;osdb 通过数据表结构来创建数据表&#xff1a; -- 员工信息表 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 是一个重要的数据库管理系统版本&#xff0c;它带来了多项改进和新特性&#xff0c;本文将超详细的带大家手动安装一下MySQL5.7。 二、下载MySQL5.7版本 MySQL5.7安装包 链接&#xff1a;https://pan.baidu.com/s/1lz5rp9PwfyeHzkEfI_lW6A 提取码&#…

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

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

Kubernetes 文档 / 概念 / 服务、负载均衡和联网

Kubernetes 文档 / 概念 / 服务、负载均衡和联网 此文档从 Kubernetes 官网摘录 中文地址 英文地址 Kubernetes 网络模型 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址&#xff0c; 这就意味着你不需要显式地在 Pod 之间创建链接&#xff0c;你几乎不需要处理容器…

Django 请求方式

在 Django 中要想知道请求方式&#xff0c;可以在views.py文件里获知。views.py 是在自己创建的app文件夹里的 from django.shortcuts import redirectdef login(request):# 获取请求方式 GET/POSTprint(request.method)# 获取url中的参数&#xff1a;/login/?n1123&n2…

深入理解 Docker:概念、原理与操作指南

推荐一个AI网站&#xff0c;免费使用豆包AI模型&#xff0c;快去白嫖&#x1f449;海鲸AI Docker 简介、原理及操作 Docker 是一个开源的容器化平台&#xff0c;它可以将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;从而实现应用程序的快速部署、运行和管理。本文…

c# 贪心算法(Greedy Algo)

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

IDEA 2024.1安装与破解

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

python纸牌塔游戏

下面是一个简单的Python实现的纸牌塔游戏的示例代码。这个游戏是基于简单的图形用户界面和命令行界面。 import random import sys import time # 定义游戏中的卡片数量 CARD_COUNT 52 # 定义游戏中的牌堆数量 DECK_COUNT 4 # 定义游戏中的卡片等级 RANKS [A, 2, 3…

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 把我们要做的系统放进去&#xff0c;改进它 4 00:00:13,470 --> 00:00:15,260 怎么改进&#xff1f;…