据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法。

简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数:

  1. In [40]: def add_one(i):
  2. ....: return i+1
  3. ....:
  4.  
  5. In [41]: for i in range(1, 3):
  6. ....: print add_one(i)
  7. ....:
  8. 2
  9. 3

如果使用map就简单一些了:

  1. In [42]: map(add_one, range(1, 3))
  2. Out[42]: [2, 3]

其实这里还不够pythonic, 毕竟我们忘记了还有lambda这个匿名函数

 

  1. In [44]: map(lambda x: x+1, range(1, 3))
  2. Out[44]: [2, 3]

reduce的作用是对可迭代对象依次做某种操作,比方说依次相加或者乘之类的

内置的说明如下:

  1. Help on built-in function reduce in module __builtin__:
  2.  
  3. reduce(...)
  4. reduce(function, sequence[, initial]) -> value
  5.  
  6. Apply a function of two arguments cumulatively to the items of a sequence,
  7. from left to right, so as to reduce the sequence to a single value.
  8. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
  9. ((((1+2)+3)+4)+5). If initial is present, it is placed before the items
  10. of the sequence in the calculation, and serves as a default when the
  11. sequence is empty.
  12. (END)

 使用方法如下:

  1. In [18]: reduce(lambda x, y: x*y, [1, 2, 3])
  2. Out[18]: 6
  1. In [19]: reduce(lambda x, y: x*y, [1])
  2. Out[19]: 1
  3.  
  4. In [20]: reduce(lambda x, y: x*y, [], 0) # 最后一个为初始值
  5. Out[20]: 0

  

 

filter是对可迭代对象做某种过滤,使用方法和上面两个相似:

  1. Help on built-in function filter in module __builtin__:
  2.  
  3. filter(...)
  4. filter(function or None, sequence) -> list, tuple, or string
  5.  
  6. Return those items of sequence for which function(item) is true. If
  7. function is None, return the items that are true. If sequence is a tuple
  8. or string, return the same type, else return a list.
  1. In [22]: filter(lambda x: x > 5, range(10))
  2. Out[22]: [6, 7, 8, 9]

 

基本使用方法大致如上,可能觉得刚开始觉得用处不大,实际上用习惯了就会觉得十分顺手

比方说让大家求1到100的和,可能函数写出来也只有几行代码,但是你用reduce呢,就只有一行。

大家可以试着用这种方法算一下 1!+2!+...+100!

(发现内置的文档已经很赞了~

参考见:

http://my.oschina.net/zyzzy/blog/115096

https://eastlakeside.gitbooks.io/interpy-zh/content/Map%20&%20Filter/index.html

python 中的map(), reduce(), filter的更多相关文章

  1. python中lambda,map,reduce,filter,zip函数

    函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...

  2. Python中的Map/Reduce

    MapReduce是一种函数式编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数 ...

  3. python中的map、filter、reduce函数

    三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str.   1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...

  4. Python 中的 map, reduce, zip, filter, lambda基本使用方法

    map(function, sequence[, sequence, ...] 该函数是对sequence中的每个成员调用一次function函数,如果参数有多个,则对每个sequence中对应的元素 ...

  5. 简单易懂之python 中的map,filter,reduce用法

    map(function,sequence) 把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list. 重点是结果返回一个列表,这样对返回的列表就可以干很多的活了. ...

  6. python基础之map/reduce/filter/sorted

    ---map(fun,iterable) 首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象.即map(fun,iterable) map函数就是将具 ...

  7. python中的map,filter,zip函数

    map() Return an iterator that applies function to every item of iterable, yielding the results 例如: a ...

  8. [python基础知识]python内置函数map/reduce/filter

    python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...

  9. python一些内建函数(map,zip,filter,reduce,yield等)

    python一些内建函数(map,zip,filter,reduce,yield等) map函数 Python实际上提供了一个内置的工具,map函数.这个函数的主要功能是对一个序列对象中的每一个元素应 ...

随机推荐

  1. 【位运算经典应用】 N皇后问题

    说到位运算的经典应用,不得不说N皇后问题. 学过程序设计的都知道N皇后问题,没听过也没关系.很简单,最传统的的N皇后问题是这个样子的,给你一个n * n大小的board,让你放n个皇后(国际象棋),要 ...

  2. .net破解二(修改dll)

    多谢大家支持! 昨天说了一下反编译与剥壳(.net破解一(反编译,反混淆-剥壳,工具推荐)),今天就来修改修改dll,为了方便,我自己写一个简单程序用来测试 代码如下: 一个 ConsoleAppli ...

  3. HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子

    前面两节,我们已经对<五子飞>有个初步的认识,对走棋路线也有了基本的了解,现在里沃特继续跟大家分享HTML页面,另外把棋盘棋子也画出来. 演示地址:http://www.lyout.com ...

  4. [转] Asp.net vNext webapi 自托管

    [声明]本文转自:http://www.cnblogs.com/ListenCode/p/4206204.html 转载需注明! 微软推出的Asp.net vNext(asp.net 5.0)的其中的 ...

  5. js中什么时候回考虑用call或者apply

    这里我说出自己的浅薄的理解,希望大家可以共鸣! call一些装逼的用法: call的用法通常在两个地方会用到, 1.需要加一个层的时候,也可以不准确的说继承的时候,继承是继承父类的属性或者方法,而ao ...

  6. nios II--实验5——定时器硬件部分

    定时器 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next>  ...

  7. 【转】关于Class.forName(“com.mysql.jdbc.Driver”)

    原文:http://www.cnblogs.com/gaojing/archive/2012/03/23/2413638.html 传统的使用jdbc来访问数据库的流程为: Class.forName ...

  8. android开发------第一个android程序

    好吧,现在我们就一起来写第一个android程序,看它带给了我们什么.sdk的使用和虚拟机的创建我就不说了.项目创建过程先略过,不太重要. 那第一个程序我们能学到什么知识呢?一起看吧.^-^ 在IDE ...

  9. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

  10. LAMP安装各种问题解决方案

    LAMP环境配置安装注意安装步骤及说明事项. LAMP安装各种问题解决 1. 访问ftp报错 解决: 关闭selinux vi /etc/selinux/config 内容修改为: selinux=d ...