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

推荐订阅源

Latest news
Latest news
T
Troy Hunt's Blog
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
V
V2EX
博客园 - 司徒正美
B
Blog RSS Feed
AWS News Blog
AWS News Blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
NISL@THU
NISL@THU
博客园 - Franky
P
Proofpoint News Feed
博客园_首页
C
CERT Recently Published Vulnerability Notes
雷峰网
雷峰网
S
Schneier on Security
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
WordPress大学
WordPress大学
The Hacker News
The Hacker News
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
Engineering at Meta
Engineering at Meta
罗磊的独立博客
T
The Blog of Author Tim Ferriss
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
SecWiki News
SecWiki News
云风的 BLOG
云风的 BLOG
美团技术团队
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
B
Blog
S
Security Affairs

博客园 - *感悟人生*

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 用来做数据累积和复杂的计算任务。