惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - *感悟人生*

PDFtoEXCEL批量处理高保真同步格式 JS 逆向与前端安全加固实战指南 批量处理苹果电脑的HEIF格式转成JPG|PNG 邮件群发系统 注册授权--续 独立授权模块 --可以为你的程序或者工具加上一把锁 音频转换合并切割工具 修改文件重命名(1、默认去掉预览和备份,2、默认当前文件路径) AI 平台 SQL语句解析 扣代码中,遇到this 应该怎么处理 AST解OB混淆,适用大部分的混淆 Akamai的形成与风控分析:聚焦Akamai 3.0 执行py3o的重启脚本(包含手动执行,以及自动执行的脚本) py3o中汇总的计算:sum reduce map 三种形式来处理对比 py3o中数字金额转大写 加密解密基本概念 MJ提示词自动批处理GUI版 uv 在 Python 开发中的常用命令详解 表单和载荷的区别,以及python和js在处理json时的空格问题。 R函数处理异步迭代,在爬虫中的作用。
reduce与map+filter的复杂计算场景
*感悟人生* · 2025-07-03 · via 博客园 - *感悟人生*

好的,接下来我将给你举几个常见的应用场景,说明如何使用 reducemapfilter 来处理复杂的计算逻辑。这些场景涵盖了日常开发中可能遇到的任务。

1. 使用 reduce 进行复杂的累积计算

示例场景:商品订单总价的计算(带折扣)

假设你有一个订单列表,每个订单行包含商品的价格、数量、折扣等。你需要计算订单总价,并在每个订单行上应用折扣。

订单数据:

order_lines = [
    {'product': 'A', 'price': 100, 'quantity': 2, 'discount': 0.1},  # 10% 折扣
    {'product': 'B', 'price': 200, 'quantity': 1, 'discount': 0.05},  # 5% 折扣
    {'product': 'C', 'price': 150, 'quantity': 3, 'discount': 0.2}    # 20% 折扣
]

计算逻辑:

  1. 对于每个订单行,计算实际的总价:实际总价 = 价格 * 数量 * (1 - 折扣)

  2. 使用 reduce 来累积所有订单的总价。

代码实现:

from functools import reduce

# 计算每个订单行的总价并进行累积
total_price = reduce(
    lambda acc, line: acc + (line['price'] * line['quantity'] * (1 - line['discount'])),
    order_lines, 0  # 初始值为 0
)

print(f"订单总价:{total_price}")

解释:

  • reduce 函数接受一个累积器(acc),它会将每个订单行的总价累加。

  • 通过 line['price'] * line['quantity'] * (1 - line['discount']) 计算每个订单行的折后价格。

  • 最终通过 reduce 汇总所有订单行的折后价格,得到订单的总价。

计算结果:

订单总价:765.0

2. 使用 mapfilter 进行复杂的转换和过滤

示例场景:筛选并计算符合条件的商品总价

假设你有一个商品列表,每个商品包含 类型价格库存 等信息。你需要:

  1. 筛选出库存大于 10 的商品。

  2. 对这些商品应用 10% 的折扣。

  3. 计算这些商品的总价格。

商品数据:

products = [
    {'product': 'A', 'price': 100, 'stock': 5, 'category': 'electronics'},
    {'product': 'B', 'price': 200, 'stock': 20, 'category': 'clothing'},
    {'product': 'C', 'price': 150, 'stock': 15, 'category': 'electronics'},
    {'product': 'D', 'price': 300, 'stock': 8, 'category': 'clothing'},
    {'product': 'E', 'price': 250, 'stock': 30, 'category': 'electronics'}
]

计算逻辑:

  1. 筛选库存大于 10 的商品:使用 filter 过滤出库存大于 10 的商品。

  2. 应用折扣:使用 map 对每个商品应用 10% 的折扣。

  3. 计算总价:最后通过 sum 计算所有符合条件商品的总价。

代码实现:

# 筛选库存大于10的商品
filtered_products = filter(lambda p: p['stock'] > 10, products)

# 对这些商品应用10%折扣
discounted_products = map(lambda p: p['price'] * 0.9, filtered_products)

# 计算总价格
total_price = sum(discounted_products)

print(f"符合条件商品的折后总价:{total_price}")

解释:

  1. filter(lambda p: p['stock'] > 10, products):这一步筛选出库存大于 10 的商品。

  2. map(lambda p: p['price'] * 0.9, filtered_products):这一步对筛选出的商品应用 10% 的折扣(即价格的 90%)。

  3. sum(discounted_products):最终计算折扣后的总价。

计算结果:

符合条件商品的折后总价:1050.0

总结:

  • reduce:适合进行复杂的累积计算,比如折扣后价格的累加,或者需要多个中间计算步骤的聚合。

  • map:适合对每个元素进行简单的转换或处理(如应用折扣)。

  • filter:适合用来筛选符合条件的元素,比如库存大于某个数值的商品。

这些工具各有其优势,通常可以结合使用。mapfilter 用来做数据转换和筛选,reduce 用来做数据累积和复杂的计算任务。