美文网首页
map和reduce(第24篇)

map和reduce(第24篇)

作者: 你好星期四 | 来源:发表于2016-04-12 22:00 被阅读38次

    了解map和reduce之前,你得了解高阶函数,也就是上一篇内容。

    知道了函数可以作为另一个函数的参数之后,再来了解map就简单多了,因为map和reduce都是高阶函数。

    map函数

    map()函数接收两个参数,第一个参数是一个函数,第二个参数是一个Iterable对象,map函数会将第一个函数参数依次作用到第二个Iterable参数的每一个元素上,然后返回一个新的Iterable。
    比如你想求list中的每一个元素的绝对值,可以使用map函数:

    >>> m = map(abs, [-10, 2, -4, 0, 1, 6, -3])
    >>> list(m)
    [10, 2, 4, 0, 1, 6, 3]
    

    注意map返回的是一个map对象,map对象属于Iterable。如果你想让它变成list,可以使用list()函数。

    reduce函数

    reduce()函数也接受两个参数,第一个参数是一个函数,第二个参数是一个Iterable对象,但reduce函数会将第一个函数参数作用在第二个Iterable参数的第一个元素上,得到的结果再继续和下一个元素做累计运算,返回最终的结果。举个例子,你要将一个列表中的所有元素相加,返回所有元素之和:

    >>> from functools import reduce
    >>> def add(a, b):
                return a + b
    
    >>> reduce(add, [1, 2 ,3, 4])
    10
    
    例子1 将整数序列变成整数
    >> from functools import reduce
    >>> def func(x, y):
     return x * 10 + y
    
    >>> reduce(func,[1,2,3,4,5,6])
    123456
    >>> 
    
    例子2 将整数字符串变成整数
    >>> from functools import reduce
    >>> def func(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]
    
    >>> reduce(func,map(char2num,'12345'))
    12345
    

    封装一下

    >>> def str2int(s):
     def func(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(func,map(char2num,s))
    
    >>> str2int('12345')
    12345
    >>> 
    

    相关文章

      网友评论

          本文标题:map和reduce(第24篇)

          本文链接:https://www.haomeiwen.com/subject/hnswlttx.html