测试开发通关秘籍五: 彻底搞懂map,reduce和filter高阶函数

热爱技术的小牛

测试开发通关秘籍五: 彻底搞懂map,reduce和filter高阶函数

mapreducefilter 是 Python 中用于处理可迭代对象(如列表、元组等)的高阶函数。它们分别用于不同的操作,适合于不同的场景。以下是每个函数的用法及使用场景的详细介绍。

1. map 函数

  • 定义map(function, iterable, ...) 函数将给定函数应用于可迭代对象中的每个元素,并返回一个新的迭代器(在 Python 3 中)。
  • 用法:通常用于对列表中的每个元素进行相同的操作。

示例代码

# 定义一个函数,将数字平方
def square(x):return x ** 2# 使用 map 函数将 square 应用于列表中的每个元素
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(square, numbers))print(squared_numbers)  # 输出: [1, 4, 9, 16, 25]

使用场景

  • 当需要对可迭代对象中的每个元素应用相同的操作时,map 非常有用,例如数据预处理、转换等。

2. filter 函数

  • 定义filter(function, iterable) 函数用于过滤可迭代对象中的元素,只保留使给定函数返回 True 的元素。
  • 用法:常用于根据条件筛选出满足特定标准的元素。

示例代码

# 定义一个函数,判断数字是否为偶数
def is_even(x):return x % 2 == 0# 使用 filter 函数保留偶数
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(is_even, numbers))print(even_numbers)  # 输出: [2, 4, 6]

使用场景

  • 当需要根据某个条件从可迭代对象中筛选出特定元素时,filter 非常适用,比如清理数据、提取符合标准的数据等。

3. reduce 函数

  • 定义reduce(function, iterable[, initializer]) 函数是一个在 functools 模块中定义的函数,它对可迭代对象中的元素进行累计处理,返回单一的结果。
  • 用法:通常用于需要将多个元素聚合成一个结果的场景。

示例代码

from functools import reduce# 定义一个函数,用于累加两个数字
def add(x, y):return x + y# 使用 reduce 函数对列表中的所有元素进行累加
numbers = [1, 2, 3, 4, 5]
sum_result = reduce(add, numbers)print(sum_result)  # 输出: 15

使用场景

  • 当需要将可迭代对象中的多个元素聚合为一个值时,reduce 很适合,比如计算总和、乘积、最大值、最小值等。

总结

函数 定义 用法例子 使用场景
map 对可迭代对象的每个元素应用函数 list(map(square, numbers)) 批量转换数据,例如处理图像数据或格式化字符串
filter 过滤可迭代对象,只保留符合条件的元素 list(filter(is_even, numbers)) 数据清理、提取特定条件的元素
reduce 对可迭代对象进行累计处理 reduce(add, numbers) 聚合数据,例如计算总和、求积

这些函数可以使代码更加简洁、易读,提高数据处理的效率。

关注我

简书 | CSDN | 知乎 | 博客园| 公众号合集:热爱技术的小牛
热爱技术的小牛

本文由mdnice多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.11.8 鲜花

sosdp,FMT,FWT 下Moon Halo Some deserts on this planet were oceans once 这颗星球上的一些沙漠曾是海洋 Somewhere shrouded by the night, the sun will shine 被黑夜笼罩的地方,也会迎来光明 Sometimes I see a dying bird fall to the ground 偶尔也会见到濒死的鸟跌落地…

DB157S-ASEMI小贴片整流桥DB157S

DB157S-ASEMI小贴片整流桥DB157S编辑:ll DB157S-ASEMI小贴片整流桥DB157S 型号:DB157S 品牌:ASEMI 封装:DBS-4 特性:贴片桥堆 正向电流:1.5A 反向耐压:1000V 恢复时间:>2000ns 引脚数量:4 芯片个数:4 芯片尺寸:50MIL 浪涌电流:50A 漏电流:>10uA 工作温度:-55…

数码管驱动控制器-VK1638 SOP28点阵数显驱动芯片LED驱动器原厂FAE技术支持

产品品牌:永嘉微电/VINKA 产品型号:VK1638 封装形式:SOP28 概述 VK1638是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3线 串行接口、数据锁存器、LED 驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴 极,可支持10SEGx8GRID的点阵LED显示面板,…

从消息中间件架构发展趋势,探讨物联网平台如何支持亿级设备推送?

华为云IoT不仅仅深度使用了Apache Pulsar,同时还积极参与Pulsar社区的发展,致力于提升Pulsar的安全性、可靠性和功能性。本文分享自《华为云DTSE》第五期开源专刊,作者:贺张俭 华为云IoT技术专家 随着物联网平台业务的快速增长,基于传统消息中间件构筑面临着处理亿级设备连…

docker desktop报错0x80070422

docker desktop报错0x80070422 deploying WSL2 distributionsensuring main distro is deployed: deploying "docker-desktop":importing WSL distro"无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。\r\n错误代码:Ws1/0x80070422\r\n"outpu…

SqlServer 分页学习

在B站上看到一个分页视频,老师讲的挺好 ,记录下来。想看原视频的可以去B站 --1.建立Students表CREATE TABLE students ( ID INT PRIMARY KEY IDENTITY(1,2), NAME NVARCHAR(50) NOT NULL, SEX CHAR(6) CHECK (SEX IN (Male, Female)));GO --2. 插入30条数据INSERT I…

TMC4671使用笔记

1、单向DC电机开环测试void TMC4671SinglePhaseDC_Test(){// 电机类型和PWM配置// TMC4671_MOTOR_TYPE_N_POLE_PAIRS 寄存器用于设置电机类型和极对数。// 高16位 (0x0001):电机类型。0: 无电机 1: 单相直流电机 2: 两相步进电机 3: 三相无刷电机// 低16位 (0x0002):电机的极…

KeilC51不编译未调用的函数

KeilC51不编译未调用的函数KeilC51不编译未调用的函数 在用 Keil C51 做开发时,难免会增删功能,出现定义了的函数未调用的情况。编译时会发出“UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS”的警告,还会浪费程序存储空间。 有一个办法,可以不用手动去删除,也不会将这部…

融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

当今的应用市场中,传统的应用产品已经难以完全满足消费者的多样化需求。为了在竞争激烈的市场中脱颖而出,企业需要深入洞察用户需求,提供个性化的服务体验和差异化的产品创新,以吸引并留住消费者。 比如,购物类App通过虚实结合的方式实现虚拟穿搭;室内设计行业App可将虚拟…

牛顿法特殊形式——开方公式与二分逼近开方的

数值分析-开方公式// 开方公式 #include<bits/stdc++.h>using namespace std;int main() {double c, x0, jingdu;printf("请输入被开方数c:");scanf("%lf", &c);printf("请输入初值x0:");scanf("%lf", &x0);printf(&q…

90后斩获多家名企offer的小哥哥,做对了什么?

我本人的上一份工作,职级是高级测试开发工程师,平时的工作是以功能项目测试为主,接口自动化、web自动化、性能测试工作中都有涉及,接口自动化框架已经可以独立负责搭建并维护,性能测试也是公司内自己独立负责,可以支持公司内各种压测活动的进行。 我的短板是自动化框架的…

Python介绍和基础运用

python之基本介绍 (1)什么是python ? python 是一门编程语言 python是一门面向对象,解释型的动态类型的编程语言,guido van rossunm (吉多*范罗苏姆),在1989年发明,第一个公开发行版本与1991年; guido van rossunm (吉多*范罗苏姆) 是荷兰 计算机程序员 (2)…