【重修Python】Map & Reduce

2024-02-26 19:22:13 浏览数 (2)

封面封面

前言

在高中数学中,有一个抽象的概念,叫映射。它通常在函数、集合等主题里出现,是帮助我们理解的一个手段。不过出镜率不是很高。直到后来的神经网络算法中,又见到了差不多的东西,所以需要重新认识一下。而我们知道,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代码运行次数:1复制
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的言论。如果你也喜欢跟简化的代码,那就快来试试吧!

0 人点赞