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

python map/reduce/filter/sorted

 
阅读更多

python 内建了map()和reduce()函数。

map:

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

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

>>> 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()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的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

 

filter:

python 内建的filter()函数用于过滤序列。

和map类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是 False决定保留还是丢弃该元素。

例如,在一个 list中,删除偶数,只保留奇数:

def is_odd(n):
    return n%2==1

filter(is_odd,[1,2,3,4,5,6,7,8,9,10,15])#结果:[1,5,9,15]

 把一个序列中的空字符串去掉:

def not_empty(s):
    return s and s.strip()

filter(not_empty, ['A', '', 'B', None, 'C', '  '])
# 结果: ['A', 'B', 'C']

 可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。

 

sorted:

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序.

Pyhon内置的sorted()函数就可以对list进行排序:

>>> sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]

 此外,sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。比如,如果要倒序排序,我们就可以自定义一个reversed_cmp函数:

def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0

传入自定义的比较函数reversed_cmp,就可以实现倒序排序:

>>> sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]

 我们再看一个字符串排序的例子:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']

 默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。

现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能定义出忽略大小写的比较算法就可以:

def cmp_ignore_case(s1, s2):
    u1 = s1.upper()
    u2 = s2.upper()
    if u1 < u2:
        return -1
    if u1 > u2:
        return 1
    return 0

 忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。

这样,我们给sorted传入上述比较函数,即可实现忽略大小写的排序:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
['about', 'bob', 'Credit', 'Zoo']

 

 

分享到:
评论

相关推荐

    Python中sorted函数、filter类、map类、reduce函数

    文章目录sorted函数一、sort方法二、sorted内置函数三、情景引入filter类一、简单使用二、练习map类语法:一、简单使用二、练习reduce函数语法:一、简单使用二、设置初始值 Python中使用函数作为参数的内置函数和类...

    Python中map,reduce,filter和sorted函数的使用方法

    在Python编程语言中,有四个内置的高阶函数:`map()`, `reduce()`, `filter()` 和 `sorted()`,它们对于处理数据和简化代码有着重要作用。这些函数都是函数式编程的重要工具,尤其在处理列表和其他可迭代对象时非常...

    Python之函数式编程和高阶函数(map、reduce、filter、sorted)

    综上所述,掌握Python的函数式编程和高阶函数,如`map`、`reduce`、`filter`和`sorted`,能够帮助我们编写出更高效、更简洁的代码,提升编程能力。通过理解这些概念并熟练运用,可以有效减少代码的复杂性和维护成本...

    廖雪峰python3 完整带索引,图片 最新教程 pdf版

    map/reduce filter sorted 返回函数 匿名函数 装饰器 偏函数 模块 使用模块 安装第三方模块 单元测试 文档测试 IO编程 文件读写 StringIO和BytesIO 操作文件和目录 序列化 进程和线程 多进程 多线程 ThreadLocal ...

    python3完整版

    Python对函数式编程的支持,如map、reduce、filter和sorted函数,也被详细讲解,这些是Python强大编程能力的体现。 IO编程是任何应用程序都不可或缺的一部分,Python通过内置的模块如os、sys、文件对象等提供了强大...

    day17:高阶函数:map、reduce、sorted、fliter、lambda

    今天我们将探讨五个重要的高阶函数:`map()`、`reduce()`、`sorted()`、`filter()`以及`lambda`表达式。 一、`map()`函数 `map()`函数接受一个函数`fn`和一个序列`lsd`作为参数,将`fn`函数依次应用到`lsd`中的每个...

    Python 3教程(廖雪峰).rar

    map/reduce 125 filter 130 sorted 134 返回函数 137 匿名函数 141 装饰器 143 偏函数 148 模块 151 使用模块 153 安装第三方模块 157 面向对象编程 159 类和实例 161 访问限制 165 继承和多态 169 ...

    廖雪峰的Python 3教程——排版完美

    进阶特性部分则深入讲解了Python的高级特性,例如切片操作、迭代器和生成器、列表生成式、高阶函数、map/reduce、filter、sorted函数、匿名函数、装饰器、偏函数等。这些特性是Python强大功能的体现,也是其区别于...

    廖雪峰的python3

    Python的基本语法部分包括安装Python环境、编写第一个Python程序、使用文本编辑器、Python代码运行助手、输入和输出、数据类型和变量、字符串和编码、使用list和tuple、条件判断、循环、使用dict和set、函数的定义和...

    廖雪峰老师的python3.pdf

    8. 函数式编程:介绍了高阶函数、map/reduce、filter和sorted等函数式编程技术。 9. 返回函数、匿名函数和装饰器:这些是Python中实现高阶函数操作的几种方式。 10. 模块:展示了如何使用Python标准库中的模块,...

    coldnight#coldnight.github.com#lambda-结合map-filter-reduce-sorted

    介绍Python用于支持将函数赋值给变量的一个操作符默认是返回的,所以不用再加return关键字,不然会报错需要两个参数,第一个是一个处理函数,第二个是一个序列

    python2.7 64位

    Python 2.7的语法和特性包括但不限于:增强的异常处理、内建函数(如`enumerate()`和`sorted()`)、生成器、上下文管理器(使用`with`语句)、函数式编程工具(如`map()`, `filter()`, `reduce()`),以及`PEP 8`...

    Python3-廖雪峰 高清完整PDF版

    - 高级特性:包括切片、迭代、列表生成式、生成器、迭代器、函数式编程、高阶函数、map/reduce、filter、sorted等。 - 函数:包括调用函数、定义函数、函数的参数、递归函数、返回函数、匿名函数、装饰器、偏函数等...

    最新Python学习笔记3

    本篇学习笔记主要介绍了Python中关于变量指向函数、高阶函数以及特殊高阶函数map()、reduce()、filter()和sorted()的使用方法和原理。 首先,变量在Python中不仅可以指向基本数据类型,还可以指向一个函数名。这...

    Python3 教程

    - 高级特性:探索切片、迭代、列表生成式、生成器、迭代器、函数式编程、map/reduce、filter、sorted等高级编程技术。 - 函数和模块:讲解如何定义和调用函数、理解参数、使用匿名函数、装饰器、偏函数以及模块的...

    Python高性能编程_python进阶_python高性能_

    4. **函数式编程**:使用map()、filter()、reduce()等函数可以写出简洁且高效的代码。掌握这些函数及其组合使用技巧,能提高代码的可读性和性能。 5. **内建函数与C扩展**:Python的内建函数通常比自定义的Python...

    廖雪峰python教程打印版(完整版)(.pdf)

    函数式编程是Python支持的编程范式之一,教程中提到了map/reduce、filter、sorted、返回函数、匿名函数、装饰器和偏函数等内容。函数式编程强调的是函数的无副作用以及函数的复用性,其中map和reduce是函数式编程中...

Global site tag (gtag.js) - Google Analytics