Python map/reduce

2017-07-31 18:20:59

一、map函数

map():会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的iterator,即迭代器,使用list函数可以将之转成列表。

  • map(function, iterable, ...)
    • function -- 函数
    • iterable -- 一个或多个序列
def f(x):
    return x ** 2

print(type(map(f,[1,2,3])))
print(list(map(f,[1,2,3])))

# <class 'map'>
# [1, 4, 9]

map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的 f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串等。

 

二、reduce函数

reduce():函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作,用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

 

  • reduce(function, iterable[, initializer]):
    • function -- 函数,有两个参数
    • iterable -- 可迭代对象
    • initializer -- 可选,初始参数
from functools import reduce

def add(x,y):
    return x+y

print(reduce(add,list(range(10))))

# 45

 可以使用reduce来进行str转int

from functools import reduce

def str2int(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(fn, map(char2num, s))

 

posted @ 2017-07-31 21:48  hyserendipity  阅读(197)  评论(0编辑  收藏  举报