今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map、reduce和filter。
不知道大家看到map和reduce的时候有没有什么感觉,如果看过之前我们大数据系列介绍MapReduce文章的同学,想必有些印象。这个MapReduce不是一个分布式的计算方法么,怎么又变成Python中的方法了?其实原因很简单,因为Python是一门很年轻的语言,它在发展的过程当中吸收了很多其他领域的精华,MapReduce就是其中之一。
对之前文章感兴趣的同学可以点击下方的链接,回顾一下之前MapReduce的内容。
map
map除了地图之外,另一个英文本意是映射。在C++和Java一些语言当中,将map进一步引申成了存储key和value映射结构的容器。Python对这点做了区分,KV结构的容器命名成了dict,即字典,而map则回到了它的本意,也就是映射。
我们都知道,在数学领域,映射也是函数的定义。一个自变量通过某种映射,对应到一个因变量。同样,在Python当中,map操作本质也是函数,不过它作用的范围不再是单个变量,而是一个序列。换句话说,通过map我们可以省去循环操作,可以自动将一个容器当中的元素套用一个函数。
举个简单的例子,比如我们有一个坐标,我们希望知道它距离原点的距离。这个问题很简单,我们写一个计算距离的函数就可以解决:
def dis(point):
return math.sqrt(point[0]**2 + point[1]**2)
那如果我有多个点需要计算距离,在map出现之前,我们只能用循环来解决问题:
points = [[0, 1], [2, 4], [3, 2]]
for point in points:
print(dis(point))
但是有了map之后, 我们可以省去循环的操作,整个代码简化成了一行:
map(dis, points)
但是要注意,我们调用完map之后得到的结果不是一个list而是一个迭代器。我们直接将map返回的内容print出来,可以得到这样一个结果:
>>> print(map(dis, points)