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,以便于您获取更多的相关知识。