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

news2024/12/26 3:18:53

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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 / y
    except 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://www.coloradmin.cn/o/1935247.html

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

相关文章

第二篇 Vue项目的搭建

1、脚手架安装 npm init vuelatest:官方提供的Vue项目脚手架工具,帮助我们搭建一个最简单的vue应用。 2、vs打开项目文件夹 打开脚手架生成的文件夹到vs并安装volar插件,以便vs能够支持vue格式代码 3、启动项目 npm run dev:vu…

Leetcode1929. 数组串联

问题描述&#xff1a; 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans &#xff0c;数组下标 从 0 开始计数 &#xff0c;对于所有 0 < i < n 的 i &#xff0c;满足下述所有要求&#xff1a; ans[i] nums[i]ans[i n] nums[i] 具体而言…

目标检测算法与应用算法 DS集成 接口相关_v0.1

目录 文章目录 目录0. 目标GPS信息、速度、加速度、航向角信息的输出1. 目标检测算法接口1.1 模型相关1.2 检测结果相关 2. 应用算法接口2.1 bool cross_line; //跨线&#xff08;变道压线检测&#xff09;2.2 bool break_in; //闯入&#xff08;目标闯入&#xff09;2.3 bool …

GPT LangChain experimental agent - allow dangerous code

题意&#xff1a;GPT LangChain 实验性代理 - 允许危险代码 问题背景&#xff1a; Im creating a chatbot in VS Code where it will receive csv file through a prompt on Streamlit interface. However from the moment that file is loaded, it is showing a message with…

HTML+echarts.js实现的炫酷金色风格可视化组件

模板下载地址&#xff1a; 炫酷金色风格可视化组件 (bootstrapmb.com)https://www.bootstrapmb.com/item/14888 一款炫酷金色风格可视化组件&#xff0c;统计图表使用Echarts.js&#xff0c;整体风格采用金黄色看起来很大气&#xff0c;设计是通用型的&#xff0c;可以用作任…

格式工厂转换视频分辨率

1、下载和安装 http://www.pcfreetime.com/formatfactory/CN/index.html 2、打开视频 3、设置分辨率等参数 也可以选择保持原分辨率 4、执行导出 5、打开输出所在位置

【ARM】MDK-解决CMSIS_DAP.DLL missing报错

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录解决CMSIS_DAP.DLL missing的报错情况&#xff0c;对应相关报错信息&#xff0c;供后续客户参考&#xff0c;快速解决客户问题。 2、 问题场景 客户进行硬件调试时&#xff0c;发现Target设置内有CMSIS_DAP.DL…

[开源]语雀+Vercel:打造免费个人博客网站

大家好,我是白露。 今天我想和大家分享我的今年的第一个开源项目 —— 基于语雀+Nextjs+Vercel实现免费的博客系统。 简单来说,你在语雀写博客,然后直接一键同步到个人网站上,网站自动部署! 而且,整个过程几乎不需要额外的成本,也不用充值语雀超级会员,hh。这个项目…

电流测量分流电阻

电流测量分流电阻 测量电流的设备称为安培计。大多数现代安培计测量已知电阻的精密电阻上的电压降。电流的计算使用欧姆定律&#xff1a;我五R 大多数电流表都内置电阻器来测量电流。但是&#xff0c;当电流对于电流表来说太高时&#xff0c;需要不同的设置。解决方案是将电流…

【C++】C++旅游管理系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

ARM架构(二)—— arm v7/v8/v9寄存器介绍

1、ARM v7寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样&#xff0c; 通用寄存器&#xff1a;31个 1.2 程序状态寄存器 CPSR是程序状态毒存器&#xff0c;保存条件标志位&#xff0c;中断禁止位&#xff0c;当前处理器模式等控制和状态位。每种异常模式下还存在SPSR&…

前端JS特效第46集:js-实现响应式节庆活动砸金蛋效果

js-实现响应式节庆活动砸金蛋效果&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>响应式节庆活动砸金蛋…

万界星空科技MES系统生产计划管理的功能

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;的生产计划管理功能是其核心功能之一&#xff0c;旨在将企业的生产计划转化为实际的生产操作&#xff0c;并通过实时监控和调整来确保生产活动的顺利进行。以下是MES系统生产计划管理功…

阿里布达插画:成都亚恒丰创教育科技有限公司

阿里布达插画&#xff1a;梦幻与现实交织的绮丽画卷 在浩瀚的艺术长河中&#xff0c;总有一些作品以其独特的魅力&#xff0c;跨越时空的界限&#xff0c;触动着每一个观者的心灵。阿里布达插画&#xff0c;便是这样一股不可忽视的艺术清流&#xff0c;它以细腻的情感描绘、奇…

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

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

继电器模块的使用与代码示例

目录 前言 继电器简介 模块接线 工作原理 驱动代码 relay.h relay.c main.c 参考手册 继电器&#xff08;英文名称&#xff1a;relay&#xff09;是一种电控制器件&#xff0c;是当输入量&#xff08;激励量&#xff09;的变化达到规定要求时&#xff0c;在电气输出电…

Day16_集合与迭代器

Day16-集合 Day16 集合与迭代器1.1 集合的概念 集合继承图1.2 Collection接口1、添加元素2、删除元素3、查询与获取元素不过当我们实际使用都是使用的他的子类Arraylist&#xff01;&#xff01;&#xff01; 1.3 API演示1、演示添加2、演示删除3、演示查询与获取元素 2 Iterat…

排序系列 之 快速排序

&#xff01;&#xff01;&#xff01;排序仅针对于数组哦本次排序是按照升序来的哦代码后边有图解哦 介绍 快速排序英文名为Quick Sort 基本思路 快速排序采用的是分治思想&#xff0c;即在一个无序的序列中选取一个任意的基准元素base&#xff0c;利用base将待排序的序列分…

硬件开发——UART/I2C/SPI协议

硬件开发——UART/I2C/SPI协议 小狼http://blog.csdn.net/xiaolangyangyang 1、UART 电压&#xff1a; TTL电平&#xff1a;1&#xff1a;&#xff08;3.3V~5V&#xff09;&#xff0c;0&#xff1a;&#xff08;0V&#xff09;RS232电平&#xff1a;1&#xff1a;&#xff0…