Map和Reduce是在数据处理中很常用的两种方法。
Map
Map是指对数据集合中的每个元素执行相同的运算,并将所得的结果构建成新的集合。这种方式也使得map运算很适合在分布式环境下执行,把任务分配给多个运算节点进行处理。
在Python中,map函数的定义如下:
map(func, *iterables)
其中,func参数是应用到每个元素的函数。iterables参数是要操作的可迭代的对象。iterables的数量与func函数的参数数量相对应。
在Python 3中,map函数返回一个生成器对象,可以使用list()将结果转换为列表对象。来看一个简单的例子。
people = ["zhang","wang","li","zhao"]
titles = list(map(str.title, people))
print(titles)
上述代码中,map的第一个参数是函数str.tilte,用于将字符串中单词的首字母大写;第二个参数people是一个列表。上述代码的结果是将列表people中的每项都改成首字母大写。
我们可以看到,相比用for循环实现上述功能,使用map函数可以使代码非常简洁。
再来看多个列表的例子。
a = range(0,100)
b = range(100,200)
c = range(300,400)
result = list(map(lambda x,y,z:x*z-y*y,a,b,c))
print(result)
上述代码中传入的第一个参数是个lambda函数,该函数返回的值是x*z-y*y;后面的单个参数是三个序列a,b,c;map的执行结果是返回一个列表,每个元素都是将a,b,c中的对应元素进行a*c-b*b的运算。
Reduce
Reduce是将集合中的元素逐个进行累积运算,最终得到一个结果。reduce函数的定义如下:
reduce(func, iterable[, initial])
其中func是要使用的函数,iterable是可迭代的对象,initial是初始值。我们来看下面的代码。
from functools import reduce
def sum(a,b):
return a+b
numbers = [1,3,4,5,7,8,9,12,123,1,12,23]
result = reduce(sum,numbers,0)
print(result)
在上述代码中,传入了一个函数sum, reduce在执行时,逐一将每个元素和上一次sum执行的结果传给sumobject转换成list,并返回最后一个元素的执行结果。对于numbers的第一个元素object转换成list,则执行sum(numbers[0],0). 上述代码最终的结果是计算nubmers中所有数值的总和。
需要注意的是,map函数是内置函数,可以直接使用,而reduce函数则在functools库定义中,需要import后使用。
以上代码在Python 3.7上运行通过。
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688