python里的map和reduce

有不少文章介绍python的map与reduce,这到底是什么样的东西呢?

先看看google的paper里对mapreduce的解释

http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf

MapReduce is a programming model and an associated
implementation for processing and generating large
data sets. Users specify a map function that processes a
key/value pair to generate a set of intermediate key/value
pairs, and a reduce function that merges all intermediate
values associated with the same intermediate key.

map

map(function, iterable, ...)的第一个参数是一个函数,第二个参数接受一个iterable对象(字符串,列表,元组等)。该函数返回一个列表。

python实现map的代码

实现:将输入的不规范的用户名转换成首字母大写的标准格式

逻辑写的简单点,就3种情况,当然可以写成4种,就相对复杂了。。。

  1. 初次循环,首字母小写
  2. 非初次循环,字母大写
  3. 其它(因为初次循环,首字母大写和非初次循环,字母小写默认就满足我们的需求)
def lower2upper(s):
    loop = 0   ‘‘‘循环计数‘‘‘
    str = ""    ‘‘‘定义一个空字符串‘‘‘
    for i in s:
        if i.islower() and loop ==0:
            str = str + i.upper()
            loop +=1
        elif i.isupper() and loop !=0:
            str = str + i.lower()
            loop +=1
        else:
            str = str + i
            loop +=1
    return str

result = map(lower2upper,["adam","LiSA","ChEn","Peter","tOM"])
print result

reduce
reduce(function, iterable[, initializer])把函数从左到右累积作用在元素上,产生一个数值。如reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])就是计算((((1+2)+3)+4)+5)。Python提供的sum()函数可以接受一个list并求和,现实现一个prod()函数,可以接受一个list并利用reduce()求积。
def prod(list):
    def multiply(x, y):
        return x * y
    return reduce(multiply, list)

print prod([1, 3, 5, 7])

map和reduce
我们可以综合利用map和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}
    return reduce(fn, map(char2num, s))

print str2int("12345")
其中map用于将字符串拆分为对应的数字,并以list的方式返回。reduce用来累加各个位上的和。

时间: 2024-09-30 18:53:54

python里的map和reduce的相关文章

Python里的map、reduce、filter、lambda、列表推导式

Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map(f,l) Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81] Reduce函数 原型:reduce(function, sequence, startValue),作用是将一个列表归纳为一个输出,使用方法: def f2(x,y): return x+y reduce

【python】filter,map和reduce函数介绍

filter(function, iterable)map(function, iterable)reduce(function, sequence) filter将 function依次作用于iterable的每个元素,如果返回值为true, 保留元素,否则从iterable里面删除.function必须返回是一个bool类型的函数.例如: def test(x): return (x > 3) filter(test, [1, 2, 3, 4, 5]) =====> [4, 5] map将

Python自学笔记-map和reduce函数(来自廖雪峰的官网Python3)

感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. Python内建了map()和reduce()函数. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3,

在JavaScript函数式编程里使用Map和Reduce方法

所有人都谈论道workflows支持ECMAScript6里出现的令人吃惊的新特性,因此我们很容易忘掉ECMAScript5带给我们一些很棒的工具方法来支持在JavaScript里进行函数编程,这些工具方法我们现在可以使用了.在这些函数方法里主要的是基于JavaScript 数组对象的map()方法和reduce()方法. 如果你如今还没有使用map()和reduce()方法,那么现在是时候开始使用了.如今绝大部分的JavaScript开发平台都与生俱来的支持ECMAScript5.使用Map方

Python函数式编程——map()、reduce()

文章来源:http://www.pythoner.com/46.html 提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年Apache的Hadoop项目[2]正式将MapReduce纳入到项目中. 好吧,闲话少说,今天要介绍的是Python函数式编程中的另外两个内建函数map()和reduce(),而不是Google的MapReduce. 1.ma

Python中的 Map 和 Reduce

03 Map map()传入的第一个参数是f,map将f依次作用到序列的每个元素,并把结果作为新的Iterator返回. def f(x): return x * x 如果不用map,需要这么写: L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) 用map一行代码搞定: list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])) 另外一个map例子: list(map(str, [1, 2, 3, 4,

(转)Python函数式编程——map()、reduce()

转自:http://www.jianshu.com/p/7fe3408e6048 1.map(func,seq1[,seq2...]) Python 函数式编程中的map()函数是将func作用于seq中的每一个元素,并用一个列表给出返回值.如果func为None,作用通zip().当seq只有一个时,将func函数作用于这个seq的每一个元素上,得到一个新的seq. 举个例子来说明,(假设我们想要得到一个列表中数字%3的余数,那么可以写成下面的代码): >>> print map(la

018.Python迭代器以及map和reduce函数

一 迭代器 能被next进行调用,并且不断返回下一个值的对象 特征:迭代器会生成惰性序列,它通过计算把值依次的返回,一边循环一边计算而不是一次性得到所有数据 优点:需要数据的时候,一次取一个,可以大大节省内存空间.而不是一股脑的把所有数据放进内存. 可以遍历无限量的数据 next调用迭代器时,方向是单向不可逆的. 1.1 可迭代性对象 __iter__ 如果这个数据类型含有__iter__ 方法 我们就说他是可迭代对象 dir 获取当前数据内置的方法和属性. setvar = {1,2,"abc

python中的map和reduce学习

参考自:https://github.com/qiwsir/StarterLearningPython/blob/master/204.md#map https://github.com/qiwsir/StarterLearningPython/blob/master/204.md#reduce map(函数名/函数表达式(lambda等)/....  ,参数1,参数2) reduce(函数名/函数表达式(lambda等)/....  ,参数1) 区别: 1.参数:reduce除了函数外只允许一