`
Ydoing
  • 浏览: 106139 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

python高级函数map/reduce

 
阅读更多

Python内建了map()reduce()函数。

如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。

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

举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:

map

现在,我们用Python代码实现:

>>> def f(x):
...     return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]

map()传入的第一个参数是f,即函数对象本身。

你可能会想,不需要map()函数,写一个循环,也可以计算出结果:

L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
    L.append(f(n))
print L

的确可以,但是,从上面的循环代码,能一眼看明白“把f(x)作用在list的每一个元素并把结果生成一个新的list”吗?

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

>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

只需要一行代码。

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

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

比方说对一个序列求和,就可以用reduce实现:

>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

当然求和运算可以直接用Python内建函数sum(),没必要动用reduce。

但是如果要把序列[1, 3, 5, 7, 9]变换成整数13579,reduce就可以派上用场:

>>> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579

这个例子本身没多大用处,但是,如果考虑到字符串str也是一个序列,对上面的例子稍加改动,配合map(),我们就可以写出把str转换为int的函数:

>>> 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]
...
>>> reduce(fn, map(char2num, '13579'))
13579

整理成一个str2int的函数就是:

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))

还可以用lambda函数进一步简化成:

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]

def str2int(s):
    return reduce(lambda x,y: x*10+y, map(char2num, s))

也就是说,假设Python没有提供int()函数,你完全可以自己写一个把字符串转化为整数的函数,而且只需要几行代码!

分享到:
评论

相关推荐

    Python中的高级函数map/reduce使用实例

    Python中的高级函数map和reduce是Python语言提供的两个强大的内置函数,它们源自函数式编程的理念。在本文中,我们将深入了解map和reduce函数的基本使用方法和高级实例。 首先,我们来看map函数。map函数接受两个...

    简单了解python高阶函数map/reduce

    高阶函数map/reduce Python内建了map()和reduce()函数。 我们先看map。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。 举例说明...

    Python核心技术进阶训练篇

    - **Reduce**: reduce() 函数属于 functools 模块,用于累积地对序列中的元素执行某个函数操作。 **3. 实战案例** 例如,我们可以使用lambda表达式配合map()函数来实现列表元素的平方操作: ```python numbers = ...

    PYTHON3中内建函数MAP与REDUCE简单介绍.rar

    `map()`和`reduce()`是Python中强大的内建函数,它们提供了处理数据流和实现抽象算法的高效方式。理解并熟练使用这两个函数,能帮助开发者编写更简洁、更高效的代码。在实际编程中,应根据具体需求选择最合适的工具...

    Python之map和reduce共5页.pdf.zip

    在Python编程语言中,`map`和`reduce`是两个非常重要的函数,它们属于函数式编程的概念,可以让我们以更简洁、优雅的方式处理数据。在这份名为“Python之map和reduce”的5页PDF文档中,可能详细介绍了这两个功能及其...

    简单了解python filter、map、reduce的区别

    这篇文章主要介绍了简单了解python filter、map、reduce的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中有一些非常有趣的函数,面试的时候可能...

    Python中特殊函数集锦

    以下内容主要针过滤函数filter , 映射和归并函数map/reduce , 装饰器@ 以及 匿名函数lamda,具体内容如下: 1. 过滤函数filter  定义:filter 函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每...

    Python中的map()函数和reduce()函数的用法

    Python内建了map()和reduce()函数。 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。 我们先看map。map()函数接收两个参数,...

    Python函数式编程(第2版)1

    《Python函数式编程(第2版)》是一本面向Python开发者深入探讨函数式编程的书籍。函数式编程是一种编程范式,它强调使用函数作为基本的构建块,以减少副作用和状态变化,从而提高代码的可读性和可维护性。Python虽...

    Python map和reduce函数用法示例

    在Python编程中,map()和reduce()是两个非常有用的高阶函数。它们通常用于对序列进行操作,map()用于将函数应用于序列的每个元素,而reduce()用于将序列中的元素“累积”到单个值。 ### map函数用法 map()函数将...

    完整版 Python高级开发课程 高级教程 03 Python函数和函数式编程.rar

    在Python的高级开发中,函数和函数式编程是两个非常重要的概念,它们构成了Python编程的强大工具箱。 函数在Python中是代码组织的基本单元,可以看作是一段可重复使用的代码块。它们通过定义一个特定的命名空间,...

    详解python中三种高阶函数(map,reduce,filter).pdf

    本文将详细探讨Python中的三种高阶函数:map()、filter()和reduce()。 1. **map()函数**: map()函数的主要功能是将一个函数作用于一个或多个序列的所有元素上,并返回一个新的可迭代对象,该对象包含应用函数后的...

    python- 笔记 高阶函数map reduce fileter

    在Python中,有三个重要的高阶函数:`map()`、`reduce()` 和 `filter()`,它们在处理数据时非常有用。下面将详细解释这三个函数以及它们的用法。 1. `map()` 函数: `map()` 函数用于遍历一个可迭代对象(如列表、...

    python常用函数

    `map()` 是 Python 内置的高阶函数之一,用于将指定的函数应用于序列中的每一个元素,从而生成一个新的序列。这对于批量处理数据非常有用。 **语法:** ```python map(function, iterable, ...) ``` - `function`...

    Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析

    本文实例讲述了Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法。分享给大家供大家参考,具体如下: 函数的返回值: 函数一旦执行到 return,函数就会结束,并会返回return 后面的值,...

    完整版 Python高级开发课程 高级教程 03 Python函数和函数式编程.pptx

    函数式编程是Python的一个强大特性,它强调使用函数作为一等公民,允许将函数作为参数传递、返回,以及使用高阶函数(如map、filter、reduce)对数据进行操作。例如,我们可以使用`map()`函数将一个函数应用于列表的...

    Python3高级教程_python3_高级教程_电子版_

    高阶函数如`map()`、`filter()`和`reduce()`可以简化代码并提高可读性。闭包则允许函数访问并操作外部作用域的变量,而装饰器在不修改原有函数代码的情况下,添加额外功能或行为,如性能监控、日志记录等。 二、元...

Global site tag (gtag.js) - Google Analytics