Map与Reduce的实现(Python)

Python 3.4中有现成的map与reduce函数,支持函数式编程。今天我花了几分钟用Python源码实现了这两个函数,很简单。

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

def my_map(function, the_list):
    return [function(each_item) for each_item in the_list]


def f(x):
    return x * x


foo = my_map(f, [1,2,3,4,5,6,7,8,9])

print(foo)

## [1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce()把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

def my_reduce(function, the_list):
    result = the_list[0]
    the_list = the_list[1:]
    for each_item in the_list:
        result = function(result, each_item)
    return result


def f(x, y):
    return x * y

def f2(str1, str2):
    return str1 + ':' +str2


foo = my_reduce(f, [1,2,3,4,5,6])

print(foo)

## 720

foo2 = my_reduce(f2, ['hello', 'ni', 'hao'])

print(foo2)

## hello:ni:hao

顺便提一下函数式编程中的惰性求值,这个在Python 3.4上已经实现了。目前的内置map()函数生成一个迭代器对象,通过list()函数生成结果列表。其实这个就是惰性求值!

2014-10-17


上一篇: 本地搭建Jekyll环境(Linux系统) 下一篇: 树的遍历算法实现