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