【python】Python高阶函数--map函数的详细语法分析与应用实战

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:python综合应用,基础语法到高阶实战教学
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Python中map函数用法的详细教程
    • 引言
    • map()函数的基本语法
    • map()函数的基本用法
      • 示例1:将列表中的每个元素乘以2
      • 示例2:计算列表中所有元素的绝对值
    • map()函数与lambda表达式
      • 示例3:将字符串列表中的每个元素转换为大写
      • 示例4:将字符串中的每个字符转换为大写(注意,这里map返回的是字符的列表)
    • map()函数处理多个可迭代对象
      • 示例5:将两个列表中的元素相加
      • 示例6:将三个列表中的元素相加
    • 注意事项
    • 异常处理与map()
      • 示例7:使用`map()`和`try-except`处理可能的异常
    • map()与其他内置函数的结合
      • 示例8:结合使用`map()`和`filter()`
    • 结论

Python中map函数用法的详细教程

引言

Python的map()函数是一个强大的内置高阶函数,它允许你将一个函数应用于一个或多个可迭代对象的所有元素上,并返回一个迭代器(在Python 3中)或列表(在Python 2中,需要手动转换为列表)。map()函数在处理数据转换、数据清洗等任务时非常有用,可以极大地简化代码并提高效率。

map()函数的基本语法

map()函数的基本语法如下:

map(function, iterable, ...)
  • function:这是一个将应用于可迭代对象每个元素的函数。它可以是Python的内置函数、用户自定义的函数,或者是lambda匿名函数。
  • iterable:一个或多个可迭代对象,如列表、元组、集合、字典(在这种情况下,函数应用于字典的键)、字符串等。map()函数会将这些可迭代对象的元素作为参数传递给function

map()函数的基本用法

示例1:将列表中的每个元素乘以2

numbers = [1, 2, 3, 4, 5]
doubled_numbers = list(map(lambda x: x * 2, numbers))
print(doubled_numbers)  # 输出: [2, 4, 6, 8, 10]

这里,我们使用了lambda函数来定义一个匿名函数,该函数将输入的每个元素乘以2。map()函数将这个函数应用于numbers列表的每个元素,然后我们通过list()函数将返回的迭代器转换为列表。

示例2:计算列表中所有元素的绝对值

numbers = [-1, -2, 3, -4, 5]
absolute_numbers = list(map(abs, numbers))
print(absolute_numbers)  # 输出: [1, 2, 3, 4, 5]

在这个例子中,我们使用了Python的内置函数abs()来计算列表中每个元素的绝对值。

map()函数与lambda表达式

Lambda表达式是Python中定义匿名函数的一种方式,与map()函数结合使用时,可以编写出简洁而强大的代码。

示例3:将字符串列表中的每个元素转换为大写

names = ['david', 'peter', 'jenifer']
upper_names = list(map(lambda name: name.upper(), names))
print(upper_names)  # 输出: ['DAVID', 'PETER', 'JENIFER']

示例4:将字符串中的每个字符转换为大写(注意,这里map返回的是字符的列表)

string = "Hello"
upper_chars = list(map(lambda x: x.upper(), string))
print(upper_chars)  # 输出: ['H', 'E', 'L', 'L', 'O']

map()函数处理多个可迭代对象

map()函数还可以同时处理多个可迭代对象,将它们的对应元素作为参数传递给函数。

示例5:将两个列表中的元素相加

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
result = list(map(lambda x, y: x + y, lst1, lst2))
print(result)  # 输出: [5, 7, 9]

如果两个列表长度不一致,map()函数将停止于最短的列表末尾。

示例6:将三个列表中的元素相加

当处理多于两个的可迭代对象时,只需在map()函数中相应地增加参数即可。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]result = list(map(lambda x, y, z: x + y + z, list1, list2, list3))
print(result)  # 输出: [12, 15, 18]

注意事项

  1. 迭代器与列表:在Python 3中,map()函数返回一个迭代器。如果你需要查看或处理所有的结果,你需要使用list()函数或其他迭代方法来消费这个迭代器。
  2. 性能考虑:对于大数据集,使用map()函数可能比使用列表推导式(list comprehension)或显式循环更高效,因为map()是在C语言中实现的,且可能利用了一些底层的优化。然而,这取决于具体的实现和用例。
  3. 异常处理:当map()函数中的某个元素导致函数抛出异常时,整个map()调用会立即停止,并且异常会被抛出。因此,在使用map()时,确保传递给它的函数能够安全地处理所有类型的输入是很重要的。

异常处理与map()

由于map()在遇到异常时会立即停止,如果你需要处理可能引发异常的函数,你可能需要结合使用map()和其他机制,如try-except块或filter()函数来过滤掉可能引发异常的元素。

示例7:使用map()try-except处理可能的异常

但是,直接在map()中使用try-except是不直接支持的,因为map()的函数参数应该是一个简单的函数。一个解决方法是使用一个包装函数来捕获和处理异常。

def safe_divide(x, y):try:return x / yexcept ZeroDivisionError:return float('inf')  # 或者其他适当的处理numbers = [1, 2, 3, 4]
denominators = [1, 2, 0, 4]  # 注意第三个元素是0,会导致除零错误results = list(map(safe_divide, numbers, denominators))
print(results)  # 输出: [1.0, 1.0, inf, 1.0]

在这个例子中,我们定义了一个safe_divide函数,它尝试执行除法,并在出现ZeroDivisionError时返回float('inf')

map()与其他内置函数的结合

map()函数可以与其他Python内置函数结合使用,以实现更复杂的数据处理任务。

示例8:结合使用map()filter()

假设我们想要计算一个列表中所有正数的平方,但首先我们需要过滤掉列表中的负数。

numbers = [-1, 2, -3, 4, -5, 6]# 首先使用filter()过滤出正数
positives = filter(lambda x: x > 0, numbers)# 然后使用map()计算这些正数的平方
squares = list(map(lambda x: x**2, positives))print(squares)  # 输出: [4, 16, 36]

结论

map()函数是Python中一个非常有用的内置函数,它允许你将一个函数应用于一个或多个可迭代对象的所有元素上。通过结合使用lambda表达式、自定义函数、以及Python的其他内置函数,map()可以处理各种复杂的数据转换和清洗任务。然而,在使用时需要注意其返回的是迭代器(在Python 3中),并且它会在遇到异常时停止。此外,对于大数据集或复杂的数据处理任务,可能需要权衡map()与列表推导式等其他方法的性能。

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

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

相关文章

哪个无线麦克风音质最好,无线领夹麦克风哪个牌子好,麦克风推荐

​如今,网络世界丰富多彩,每个人都有机会成为焦点。从旅行博主的精彩游记,到健身达人的锻炼分享,再到音乐爱好者的才艺展示,优质的内容层出不穷。如果你也渴望在这个舞台上大放异彩,一款出色的无线麦克风将…

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染!今天和大家分享一下,人气推荐栏目的前端页面如何渲染内容。 经历过上一次的,新鲜好物的栏目渲染之后,我们已经熟练了,vue3的接口调用,数据渲染到页面中的整…

2024年7月17日(nodejs,npm设置国内镜像,vue脚手架,远程管理ssh,踢出用户,scp命令,ssh免密登录)

1、安装nodejs服务 nodejs是一个运行1环境,和javajdk运行环境格式一样 [roota ~]# yum -y install nodejs.x86_64 安装完成之后,使用node -v 查看版本 [roota ~]# node -v v16.20.2 2、简易服务器的环境安装npm 安装包管理器 npm node packae manger [ro…

【计算机毕设论文】基于SpringBoot学生作业管理系统

💗博主介绍:✌全平台粉丝5W,高级大厂开发程序员😃,博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来,同学门有不懂的毕设选题,项目以及论文编写等相…

【MySQL-17】存储过程-[变量篇]详解-(系统变量&用户定义变量&局部变量)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

修改单链表时传入二级指针详解

修改单链表时传入二级指针详解 我们先来看一个例子: 1.int *p &a; notice: p的值,*p,&p注意区分 p的值:就是变量a的地址:0x11 *p: 就是变量a的值:1 &p:就是p的地址:ox22 p代表的…

气膜篮球馆:理想的运动空间选择—轻空间

快速建造 气膜篮球馆的建造速度快,通常只需几周即可完成。这与传统建筑需要数月甚至数年的时间相比,显著缩短了工期。快速建造不仅能迅速投入使用,还减少了因工期延长而产生的额外费用。 成本效益 气膜结构相比传统建筑成本更低,特…

基于Llama Index构建RAG应用(Datawhale AI 夏令营)

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本文参与活动是2024 DataWhale AI夏令营;😲 在本文中作者将通过: Gradio、Streamlit和LlamaIndex介绍 LlamaIndex 构…

【C++题解】1212. 移动数组元素

问题:1212. 移动数组元素 类型:数组找数 题目描述: 在一个不重复的数组中,请将这个数组的最小数和数组第一个数交换,最大数和数组最后一个数交换。 输入: 第一行有一个整数 n ( 5≤n≤100 )…

【C】C语言静态链表转动态链表的技术探讨与实现

引言 在数据结构与算法的学习中,链表作为一种常用的线性表链式存储结构,具有灵活的内存分配和高效的插入删除操作等特点。根据链表在内存中的分配方式,链表可以分为静态链表和动态链表两种。静态链表在创建时预先分配一块连续的内存空间&…

微服务:nacos

Nacos 由Alibaba推出的集成于SpringCloudAlibaba中的一款开源注册中心框架 主要功能: 注册中心 配置管理 nacos的安装和部署 nacos默认访问端口8848 docker pull nacos/nacos-server:1.2.0 docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8…

Elasticsearch基础(五):使用Kibana Discover探索数据

文章目录 使用Kibana Discover探索数据 一、添加样例数据 二、数据筛选 三、保存搜索 使用Kibana Discover探索数据 一、添加样例数据 登录Kibana。在Kibana主页的通过添加集成开始使用区域,单击试用样例数据。 在更多添加数据的方式页面下方,单击…

idea2019版本创建JavaWeb项目并配置Tomcat步骤

一、创建JavaWeb项目 1.新建项目File->New->Project 2. 选择JavaWeb应用在New Project窗口中选择Java后勾选Java EE中的Web Application后点击next即可 3.设置项目名称后点击finish即可 4.至此项目创建完成,检查文件是否齐全,开始配置Tomcat 二、…

免费的数字孪生平台助力产业创新,让新质生产力概念有据可依

关于新质生产力的概念,在如今传统企业现代化发展中被反复提及。 那到底什么是新质生产力?它与哪些行业存在联系,我们又该使用什么工具来加快新质生产力的发展呢?今天我将介绍一款为发展新质生产力而量身定做的数字孪生工具。 新…

spring ioc的原理

1、控制反转(IOC):对象的创建控制权由程序自身转移到外部(容器) 2、依赖注入(DI):所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 Spring 中的 IoC 的实现原理就是工厂模式加反射机制。 参考资料…

中职省培丨2024年大数据技术中职教师专业技能培训班企业参观实践圆满结束

7月17日,“2024年大数据技术中职教师专业技能培训班(省培)”参训老师莅临广东泰迪智能科技股份有限公司产教融合实训中心开展企业参观实践。泰迪智能科技董事长张良均、中职业务部总监李振林、中职业务部经理黄炳德、校企合作经理吴桂锋及来自…

SCU(Seat Control Unit,座椅控制单元)

SCU也叫SCM(Seat Control Module) 智能座椅可以支持更多的座椅姿态调节,除了水平、高度、靠背常规调节,还支持旋转、腿托、肩部、侧翼等方向调节来实现舒适坐姿,智能座椅同时支持加热、通风、按摩、记忆、迎宾等功能。…

一款国外开发的高质量WordPress下载站模板主题

5play下载站是由国外站长开发的一款WordPress主题,主题简约大方,为v1.8版本, 该主题模板中包含了上千个应用,登录后台以后只需要简单的三个步骤就可以轻松发布apk文章, 我们只需要在WordPress后台中导入该主题就可以…

Linux系统学习日记——vim操作手册

Vim编辑器是linux下的一个命令行编辑器,类似于我们windows下的记事本。 目录 打开文件 编辑 保存退出 打开文件 打开 hello.c不存在也可以打开,保存时vim会自动创建。 效果 Vim打开时,处于命令模式,即执行命令的模式&#x…

Java的list集合总结

在编程语言中,我们必然少不了存储数据的容器,虽然我们有数组,但是数组是连续的开辟处一块连续的内存空间,我们的数据过大会无法存储完,数据量小,会浪费空间,所以我们需要使用集合存储数据&#…