前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【重修Python】Map & Reduce

【重修Python】Map & Reduce

原创
作者头像
花花Binki
修改2024-02-26 19:22:13
19610
代码可运行
修改2024-02-26 19:22:13
举报
运行总次数:0
代码可运行
封面
封面

前言

在高中数学中,有一个抽象的概念,叫映射。它通常在函数、集合等主题里出现,是帮助我们理解的一个手段。不过出镜率不是很高。直到后来的神经网络算法中,又见到了差不多的东西,所以需要重新认识一下。而我们知道,python是对这些算法有很简单的入门,这就是今天要聊的主题之一:函数Map。然而提到他又不得不说到另一个函数Reduce

实战

认识Map和Reduce

在Python中,map和reduce是两个非常有用的内置函数,它们都来自于functools模块。它们主要用于处理可迭代对象(如列表、元组等),并对其中的元素执行特定的操作。

Map

先来看下map的定义(两个参数的)

代码语言:python
代码运行次数:0
复制
def map(
    __func: Callable[..., _S],  # 要应用的函数
    *iterables: Iterable[Any],  # 要迭代的可迭代对象
) -> Iterator[_S]: ...

使用起来就是

代码语言:python
代码运行次数:0
复制
map(function, iterable)
Map简单原理
Map简单原理

案例

实现一元一次函数


y=2x + 1
代码语言:python
代码运行次数:0
复制
import matplotlib
import matplotlib.pyplot as plt

# 绘制横线
def drawOneLine(x, y):
    plt.plot(x, y)
    # 将输出保存为图片
    plt.savefig('plot.jpg')

# 一元一次方程 y = 2x + 1
def func(x):
    return 2 * x + 1

# 使用Agg模式
matplotlib.use('Agg')

# 输入变量
inputX = [0, 1, 2, 3, 4, 5];

# 显示结果
drawOneLine(inputX, list(map(func, inputX)))

运行结果

函数 y=2x + 1
函数 y=2x + 1

Reduce

reduce函数接受一个函数(或可调用对象)和一个可迭代对象作为参数。它将函数应用于可迭代对象的前两个元素,然后将结果与下一个元素一起传递给函数,依此类推,直到处理完所有元素。最终,reduce返回一个单个的结果值。

相比于map,reduce记录上次运算结果,并将结果参与到本次运算中,在一些特殊场景下,也省了一部分代码量。

代码语言:python
代码运行次数:0
复制
"""
    function: 要应用的函数
    iterable: 要迭代的可迭代对象
    value: 结果
"""
reduce(function, iterable[, initial]) -> value

简单使用

代码语言:python
代码运行次数:0
复制
from functools import reduce  

result = reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
print(result) # 15

综合应用

马上到年底了,该算工资了,那么我们来用map和reduce实现一下税前和税后的总工资.。

代码语言:python
代码运行次数:0
复制
from functools import reduce

# 定义员工类
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

# 员工
employees = [
    Employee("张三", 5000),
    Employee("李四", 6000),
    Employee("王五", 7000),
    Employee("王二麻子", 8000),
    Employee("花花", 9000),
]

# 税率:20%
tax_rate = 0.2

# 员工的税前收入
def pre_tax_income(employee):
    return employee.salary

# 员工的税后收入
def post_tax_income(employee, tax_rate):
    return employee.salary * (1 - tax_rate)

# 使用map计算每个员工的税前收入
pre_tax_totals = map(pre_tax_income, employees)

# 使用map计算每个员工的税后总收入
post_tax_totals = map(lambda employee: post_tax_income(employee, tax_rate), employees)

# 使用reduce计算税前总收入
pre_tax_total = reduce(lambda x, y: x + y, pre_tax_totals)

# 使用reduce计算税后总收入
post_tax_total = reduce(lambda x, y: x + y, post_tax_totals)

print("税前总收入:", pre_tax_total)  # 输出:税前总收入: 35000
print("税后总收入:", post_tax_total)  # 输出:税后总收入: 28000.0

总结

以上就是map和reduce的快速入门了,其实不难发现,只是语法简化了一些,少写一些代码。所以经常能看见python一行代码实现XXX的言论。如果你也喜欢跟简化的代码,那就快来试试吧!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实战
    • 认识Map和Reduce
      • Map
      • 案例
      • Reduce
    • 综合应用
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com