美文网首页我的python学习日记
看了廖雪峰的map和reduce教程的总结

看了廖雪峰的map和reduce教程的总结

作者: Juha | 来源:发表于2018-10-10 14:07 被阅读0次

    因为自己也是一个小白,所以对map和reduce也不能很好的理解。如果有错误还是希望高手能够指出~

    最近看到一个很有意思的比喻,就是说做一个三明治。map是把所有的原材料加工的方法,比方说胡萝卜洗干净处理好,面包做成面包片,洋葱切成片等等,把原来的东西换个形式,但还是和以前一样是个单独的个体;reduce就是把处理完的食品加工到一起,变成了一个三明治哈哈。

    MapReduce.png

    首先对于map函数:
    map()有两个参数,第一个是模板函数,第二个是可迭代的数据,可以是字符串、元组和列表等。
    例如:

    t = map(int,'1234')
    print(list(t))
    

    结果则是

    [1,2,3,4]
    

    即map函数会对序列中的每个元素做目标函数的操作,然后返回一个可迭代的数据。

    然后对于reduce函数:
    和map函数一样,reduce同样是两个输入参数,第一个是目标函数,第二个是数据。
    和map函数不同的是,reduce的目标函数需要有两个输入参数,而且reduce函数返回的数据是作用在所有数据之间的计算结果,不是像map函数一样孤立的处理单独的数据。这么说可能有点不太严谨。可以拿例子说明一下:

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

    然后在廖雪峰的教程底下有三道习题,这里贴上我写的方法:

    #1、map函数实现将列表中的所有字符串首字母变成大写
    def normalizer(x):
      #  for i in x:(这里不需要用for循环,傻了)
         return str.upper(x[0])+str.lower(x[1:])
     def normalize(x):
         return map(normalizer,x)
    
    #2、编写一个prod()函数,可以接受一个list并利用reduce()求积:
    from functools import reduce
    def times(x,y):
        return x*y
    def prod(x):
        return reduce(times,x)
    #3、# 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456
    from functools import reduce
    def mix(a,b):
      return 10*a+b
    def flo(x):
        return map(float,x)
    def str2float(x):
        index = x.find('.')#取到小数点所在的下标/索引
        a = x[0:index]#小数点之前的则为整数部分
        b = x[index+1:]#小数点之后的则为小数位份
        s = len(b)
        return reduce(mix,flo(a))+reduce(mix,flo(b))*10**(-1*s)
    

    相关文章

      网友评论

        本文标题:看了廖雪峰的map和reduce教程的总结

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