Python的filter, map, reduce和zip等内置序列函数

filter, map, reduce, zip都是针对python中的sequence数据类型的内置方法。

名词解释:本文中的iterable是指可迭代对象,包括sequence和iterator,及其他具有可迭代性的container。

1. filter(function, iterable)

filter的工作原理是使用第一个参数对象(function或者None)来对第二参数对象iterable进行运算,并根据运算结 果的布尔值来过滤iterable中的元素。

对function返回值的布尔运算,如果为True,则将当前元素存储到string, tuple或者list中并最终返回对应类型的 对象;如果为False,则将当前元素过滤掉,如果function没有返回值,则视为返回None,因此所有元素都会被过滤掉。 如果第一个参数不是function而是None,则返回iterable中所有为True的元素。

# function有返回值
>>> filter(lambda d: d != 'a', 'abcd')  # 过滤掉了字母'a'。
'bcd'

>>> def d(x):                     # 不使用lambda时,先定义一个充当过滤器的

函数。
      return True if x != 'a' else False

>>> filter(d, 'abcd')
'bcd'
# function没有返回值
>>> def f(x):   
    if x != 'a':
        print x
    else:
        pass

>>> foo = filter(f, 'abcd')  # 'abcd'中所有字符都被过滤掉了
b
c
d
>>> foo
''
# 第一个参数为None
>>> filter(None, 'abcd')     # 没有过滤任何东西
'abcd'

  >>> filter(None, [1,2,3,4,5,0])   # 过滤掉了0
  [1, 2, 3, 4, 5]

注意:只有当iterable是一个string或者tuple的时候,filter返回的才是string或者tuple,其余都全都是返回list 。而function是一个单参数的函数。

2. map(function, iterable, ...)

map会将iterable对象里的元素遍历到function中进行运算,并返回一个list对象来存储所有的运算结果。map支持多 个iterable参数,如果多个iterable参数元素数量不同,对于数量较少的那个iterable对象,在超出部分取值时值为 None。当第一个参数不为function为None时,返回一个由tuple组成的列表,每个tuple中的元素分别来自各个iterable 对象。

>>> map(lambda a: a+1, [1,2,3,4])
[2, 3, 4, 5]
>>> map(lambda a, b: a+b, [1,2,3,4], (2,3,4,5))
[3, 5, 7, 9]
>>> map(lambda a, b: a + b if b else a + 10, [1,2,3,4,5], (2,3,4,5))   # 第2个iterable对象少了

一个元素
[3, 5, 7, 9, 15]
>>> map(None, [1,2,3,4,5], [1,2,3])
[(1, 1), (2, 2), (3, 3), (4, None), (5, None)]

注意:function中的参数数量与map中的iterable参数个数相同。

3. reduce(function, iterable, start_value)

reduce函数第一次会在iterable对象中取前两个值传入function中进行运算,然后运算返回值作为第一个参数,再在 iterable对象中取第三个值传入function中进行运算,依次类推,直至iterable对象中所有元素被取值完毕。如果设定 了start_value值,那么start_value将作为第一次执行function函数时的一个参数,并在iterable中取第一个元素作为 function的另一个参数。

>>> reduce(lambda x, y: x+y, range(0,10))
45
>>> reduce(lambda x, y: x+y, range(0,10), 10)
55

注意:function是一个双参数的函数,如果没有返回值,则返回None到下一次运算中。

>>> reduce(d, range(0,10))
None2
None3
None4
None5
None6
None7
None8
None9

4. zip(seq[, seq, ...])

zip函数会对每个sequence对象依次取相同索引的值到一个tuple中,然后返回一个由这些tuple组成的列表。tuple的 数量由所有sequence中具有最少索引的那个sequence决定,该sequence取值完毕后便不再继续对剩余的sequence取值。

>>> zip([1,2,3,4],[2,3,4,5])
[(1, 2), (2, 3), (3, 4), (4, 5)]
>>> zip([1,2,3,4], (2,3,4,5,6,7))
[(1, 2), (2, 3), (3, 4), (4, 5)]
>>> zip([1,2,3,4], [[2,3,4],[2,3]])
[(1, [2, 3, 4]), (2, [2, 3])]

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, iterator
, 参数
, function
, 元素
, 运算
, reduce个数
, 一个
, reduce函数
, map参数
filter函数过滤
map filter reduce、js map filter reduce、map reduce、map reduce 原理、mapred.reduce.tasks,以便于您获取更多的相关知识。

时间: 2024-10-16 03:59:00

Python的filter, map, reduce和zip等内置序列函数的相关文章

Python内置函数之filter map reduce介绍_python

Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当于过滤器.调用一个布尔函数bool_func来迭代遍历每个seq中的元素:返回一个使bool_seq返回值为true的元素的序列. >>> N=range(10) >>> print filter(lambda x:x>

Python函数学习:lambda(), filter(), map(), reduce()

1.lambda() lambda()是Python里的匿名函数,其语法如下: lambda [arg1[, arg2, ... argN]]: expression 下面是个1+2=3的例子 >>> fun = lambda x,y:x+y >>> fun(1,2) 3 >>> (lambda x,y:x+y)(1,2) 3 2.filter() filter(function, sequence):对sequence中的item依次执行functi

Python补充03 Python内置函数清单

原文:Python补充03 Python内置函数清单 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.   Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello World!") 在Python教程中,我们已经提到下面一些内置函数: 基本数据类型 type() 反过头来看看 dir() help(

Python两个内置函数 locals 和globals(学习笔记)_python

Python两个内置函数--locals 和globals 这两个函数主要提供,基于字典的访问局部和全局变量的方式. 在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键字就是变量名,字典的值就是那些变量的值.实际上,名字空间可以象Python的字典一样进行访问 每个函数都有着自已的名字空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数和局部定义的变量.每个模块拥有它自已的名字空间,叫做全局名字空

Python教程--内置函数help()命令使用

help函数是python的一个内置函数,在python基础知识中介绍过什么是内置函数,它是python自带的函数,任何时候都可以被使.help函数能作什么.怎么使用help函数查看python模块中函数的用法,和使用help函数时需要注意哪些问题,下面来简单的说一下. help函数能作什么 在使用python来编写代码时,会经常使用python自带函数或模块,一些不常用的函数或是模块的用途不是很清楚,这时候就需要用到help函数来查看帮助. 这里要注意下,help()函数是查看函数或模块用途的

从两个例子看 Python【map、reduce、filter】内置函数的使用

一 概念介绍         本文从求质数,求阶乘两个示例, 提示Python的内置函数[map.reduce.filter]的使用方式         详细参见:https://docs.python.org/2/library/functions.html     Map函数: 对iterable中的item依次执行function(item),执行结果输出为list map(function, iterable[, iterable, ...]) -> list     Filter函数:

王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()

转载请注明出处:王亟亟的大牛之路 首先在这里祝愿大家,新年快乐,工作顺利,BUG少少!!! 本来说是在春节假期内继续维持着写文章的进度,但是还是偷懒了几天(打了4天SC2哈哈哈) 今天上的是关于Python的文章,毕竟在亲戚家拜年,懒得插各类手机调试什么的,况且确实好久没有弄Python了,就写了,废话不多,开始正题!! 函数式编程 函数是什么? 把复杂的操作化为简单的函数分解成简单的操作,这种操作就是面向过程,也就是C这类的实现的大体概念. 函数式是什么? 函数没有变量,任意一个函数,只要输入

Python内置函数map、reduce、filter在文本处理中的应用

文件是由很多行组成的,这些行组成一个列表,python提供了处理列表很有用的三个函数:map.reduce.filter.因此在文本处理中,可以使用这三个函数达到代码的更加精简清晰. 这里的map.reduce是python的内置函数,跟hadoop的map.reduce函数没有关系,不过使用的目的有点类似,map函数做预处理.reduce函数一般做聚合. map.reduce.filter在文本处理中的使用 下面是一个文本文件的内容,第1列是ID,第4列是权重,我们的目标是获取所有ID是奇数的

python 内部函数,以及lambda,filter,map等内置函数

1 #!/usr/bin/python 2 #encoding=utf-8 3 4 def back(): 5 return 1,2, "xxx" 6 7 #python 可变参数 8 def test(*param): 9 print "参数的长度是:%d" % len(param) 10 print "第二个参数是:%s" % param[1] 11 print "第一个参数是:%s" % param[0] 12 13 t