Python 函数式编程进阶:map、filter、reduce
Python 函数式编程进阶:map、filter、reduce
- 介绍
- map 函数
- 作用和语法
- 使用 map 函数
- Lambda 函数的配合应用
- filter 函数
- 作用和语法
- 使用 filter 函数
- Lambda 函数的结合运用
- reduce 函数
- 作用和语法
- 使用 reduce 函数
- 典型应用场景
介绍
在函数式编程中,map、filter、reduce 是三种基本的高阶函数,它们在处理数据集合时起着至关重要的作用。这些函数有助于执行列表(或数组)的转换和操作,而不需要改变原始数据集合。它们通常用于简化算法,使得代码更加简洁、易于理解和维护。
map 函数
作用和语法
map 函数遍历集合中的每个元素,并应用一个给定的函数,然后返回一个包含结果的新集合。
在 Python 中,map 函数的基本语法如下:
map(function, iterable, ...)
function: 要应用到每个元素上的函数。iterable: 一个或多个可迭代的对象。
使用 map 函数
# 定义一个函数,将元素乘以 2
def multiply_by_two(x):return x * 2
# 使用 map 应用这个函数到列表 [1, 2, 3]
result = map(multiply_by_two, [1, 2, 3])
# 将结果转换为列表
print(list(result)) # 输出: [2, 4, 6]

Lambda 函数的配合应用
# 使用 lambda 函数简化 map 调用
result = map(lambda x: x * 2, [1, 2, 3])
print(list(result)) # 输出: [2, 4, 6]

filter 函数
作用和语法
filter 函数遍历集合中的每个元素,应用一个测试函数,仅保留那些测试结果为 True 的元素。
Python 中的 filter 函数语法如下:
filter(function, iterable, ...)
function: 测试每个元素的测试函数。iterable: 一个或多个可迭代的对象。
使用 filter 函数
# 定义一个函数,检查元素是否为偶数
def is_even(x):return x % 2 == 0
# 使用 filter 应用这个函数到列表 [1, 2, 3, 4, 5]
result = filter(is_even, [1, 2, 3, 4, 5])
# 将结果转换为列表
print(list(result)) # 输出: [2, 4]

Lambda 函数的结合运用
# 使用 lambda 函数简化 filter 调用
result = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
print(list(result)) # 输出: [2, 4]

reduce 函数
作用和语法
reduce 函数将一个二元函数累积地应用到一个序列的所有元素上,从左到右,直到序列结束。
Python 中的 reduce 函数语法如下:
reduce(function, iterable[, initial], ...)
function: 一个二元操作函数,有两个参数,对序列中的连续两个元素进行操作。iterable: 一个可迭代的对象。initial: 可选参数,作为第一次调用函数时的第一个参数。
使用 reduce 函数
from functools import reduce
# 定义一个函数,计算列表中所有数字的乘积
def multiply(x, y):return x * y
# 使用 reduce 计算 [1, 2, 3, 4] 的乘积
result = reduce(multiply, [1, 2, 3, 4])
print(result) # 输出: 24

典型应用场景
from functools import reduce
# 计算 Fibonacci 数列的前 n 项和
def fib_sum(n):return reduce(lambda x, _: x + fib(n-1), range(n), 0)
# 辅助函数,计算 Fibonacci 数列的第 n 项
def fib(n):return 1 if n <= 1 else fib(n-1) + fib(n-2)
# 调用函数
print(fib_sum(10)) # 输出: 550
在这段代码中,fib_sum 函数使用 reduce 来计算斐波那契数列前 10 项的和。reduce 函数以一个累加操作的 lambda 函数和一个 range 的列表作为初始参数,然后对 range 列表中的每个数字应用 lambda 函数,将其结果与之前的累加结果相加。

相关文章:
Python 函数式编程进阶:map、filter、reduce
Python 函数式编程进阶:map、filter、reduce 介绍map 函数作用和语法使用 map 函数Lambda 函数的配合应用 filter 函数作用和语法使用 filter 函数Lambda 函数的结合运用 reduce 函数作用和语法使用 reduce 函数典型应用场景 介绍 在函数式编程中,map、…...
大模型|基础_word2vec
文章目录 Word2Vec词袋模型CBOW Continuous Bag-of-WordsContinuous Skip-Gram存在的问题解决方案 其他技巧 Word2Vec 将词转化为向量后,会发现king和queen的差别与man和woman的差别是类似的,而在几何空间上,这样的差别将会以平行的关系进行表…...
14.2 url后端过滤器(❤❤)
14.2 过滤器 1. 过滤器Filter1.1 配置形式实现过滤器1.2 过滤器生命周期1.3 过滤器特性(面试点)1.4 注解形式实现过滤器1.5 两种实现的选择2. 应用2.1 字符集过滤:统一设置请求与响应字节编码1. 配置方式实现过滤器参数化:init-param标签关键代码完整代码2. 注解方式实现2.2 多…...
Leetcode 377 组合总和 Ⅳ
题意理解: 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 这道题目和凑零钱是一样的,需要求使用指定元素(纸币…...
CleanMyMacX4.14.6如何清理mac垃圾内存
一直以来,苹果电脑的运行流畅度都很好,但是垃圾内存多了磁盘空间慢慢变少,还是会造成卡顿的。这篇文章就告诉大家电脑如何清理垃圾内存,电脑如何清理磁盘空间。 一、电脑如何清理垃圾内存 垃圾内存指的是各种缓存文件和系统垃圾…...
Java 学习和实践笔记(1)
2024年,决定好好学习计算机语言Java. B站上选了这个课程:【整整300集】浙大大佬160小时讲完的Java教程(学习路线Java笔记)零基础,就从今天开始学吧。 在这些语言中,C语言是最基础的语言,绝大多…...
【自然语言处理-工具篇】spaCy<1>--介绍及安装指南
目录 前言 安装指南 pip conda spaCy升级 总结 前言 spaCy是一个开源的自然语言处理库,用于处理和分析文本数据。它提供了许多功能,包括分词、词性标注...
LeetCode树总结
144. 二叉树的前序遍历 递归写法很简单,不再赘述。迭代写法需要用到一个栈,因为是根->左子树->右子树的顺序进行遍历,所以弹出当前结点后要先入栈右儿子,再入栈左儿子。 /*** Definition for a binary tree n…...
AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起
今天分享的是AI 系列深度研究报告:《AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起》。 (报告出品方:AVIC) 报告共计:36页 行业概览:2023年呈稳…...
Netty源码系列 之 EventLoop run()方法 源码
EventLoop[实现类为NioEventLoop,我们研究NioEventLoop即可] EventLoop是一个单线程的线程池 核心作用:处理执行IO操作(accept,read,write事件),普通任务,定时任务 EventLoop封装…...
ChatGPT 4.0 升级指南, ChatGPT Plus(GPT 4.0) 有何优势?
1.ChatGPT 是什么? ChatGPT 是由 OpenAI 开发的一种基于人工智能的聊天机器人,它基于强大的语言处理模型 GPT(Generative Pre-trained Transformer)构建。它能够理解人类语言,可以为我们解决实际的问题。 ChatGPT 4.…...
springboot157基于springboot的线上辅导班系统的开发与设计
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...
【机器学习】机器学习简单入门
🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:matplotlib 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...
考研数据结构笔记(1)
数据结构(1) 数据结构在学什么?数据结构的基本概念基本概念三要素逻辑结构集合线性结构树形结构图结构 物理结构(存储结构)顺序存储链式存储索引存储散列存储重点 数据的运算 算法的基本概念什么是算法算法的五个特性有…...
【深度学习理论】持续更新
文章目录 1.统计学习理论 1.统计学习理论 统计学习理论,一款适合零成本搞深度学习的大冤种的方向 从人类学习到机器学习的对比(学习的过程分为归纳和演绎 ),引出泛化和过拟合的概念。 如何表示归纳的函数规律呢?以监督…...
npm ERR! reason: certificate has expired(淘宝镜像过期)
npm ERR! request to https://registry.npm.taobao.org/yauzl/-/yauzl-2.4.1.tgz failed, reason: certificate has expired 今天在执行npm install命令时,报错百度了下是淘宝证书过期原因 解决方法一 执行下面两个命令再进行npm install即可 npm cache clean --…...
“极简壁纸“爬虫JS逆向·实战
文章目录 声明目标分析确定目标目标检索 代码补全完整代码 爬虫逻辑完整代码 运行结果 声明 本教程只用于交流学习,不可用于商业用途,不可对目标网站进行破坏性请求,请遵守相关法律法规。 目标分析 确定目标 获取图片下载链接 目标检索…...
Django通过Json配置文件分配多个定时任务
def load_config():with open("rule.json", rb)as f:config json.load(f)return configdef job(task_name, config, time_interval):# ... 通过task_name判断进行操作if task_name get_data_times:passdef main():config load_config()for task_name, task_value…...
C++ 搜索二叉树的删除
首先查找元素是否在二叉搜索树中,如果不存在,则返回 要删除的结点可能分下面四种情况: a. 要删除的结点无孩子结点 b. 要删除的结点只有左孩子结点 c. 要删除的结点只有右孩子结点 d. 要删除的结点有左、右孩子结点 看起来有待删除节点有4中…...
构建中国人自己的私人GPT—支持中文
上一篇已经讲解了如何构建自己的私人GPT,这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型,GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品,llama.cpp 不再…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
