当前位置: 首页 > news >正文

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 函数,将其结果与之前的累加结果相加。

在这里插入图片描述

http://www.lryc.cn/news/295147.html

相关文章:

  • 大模型|基础_word2vec
  • 14.2 url后端过滤器(❤❤)
  • Leetcode 377 组合总和 Ⅳ
  • CleanMyMacX4.14.6如何清理mac垃圾内存
  • Java 学习和实践笔记(1)
  • 【自然语言处理-工具篇】spaCy<1>--介绍及安装指南
  • LeetCode树总结
  • AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起
  • Netty源码系列 之 EventLoop run()方法 源码
  • ChatGPT 4.0 升级指南, ChatGPT Plus(GPT 4.0) 有何优势?
  • springboot157基于springboot的线上辅导班系统的开发与设计
  • 【机器学习】机器学习简单入门
  • 考研数据结构笔记(1)
  • 【深度学习理论】持续更新
  • npm ERR! reason: certificate has expired(淘宝镜像过期)
  • “极简壁纸“爬虫JS逆向·实战
  • Django通过Json配置文件分配多个定时任务
  • C++ 搜索二叉树的删除
  • 构建中国人自己的私人GPT—支持中文
  • elementui 回到顶部报错
  • go-carbon v2.3.8 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
  • 【详解】斗地主随机发牌项目
  • 多账号运营为什么要使用动态住宅代理IP?
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • Arduino 推出基于乐鑫 ESP32-S3 的 STEM 教育机器人
  • Blender使用Rigify和Game Rig Tool基础
  • 【Unity优化(一)】音频优化
  • 算法.1-三大排序算法-对数器-二分
  • Midjourney新功能介绍:风格参考(Style References)详解
  • C++ 11/14/17 智能指针