python中的map、reduce、filter用法

时间:2022-03-25 02:21:17

map函数

map函数的定义:map(function, sequence[, sequence, ...]) -> list 通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合。 function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的list。

代码示例:

>>> def add(x):
 return x+10

>>> hh=[0,1,2]
>>> map(add, hh)
[10, 11, 12]

 

>>> def abc(a,b,c):
 return a*100+b*10+c

>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list3 = [7,8,9]
>>> map(abc,list1,list2,list3)
[147, 258, 369]

如果传入的函数是None时

>>> map(None,list1,list2,list3)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

reduce函数

reduce函数会对参数序列中元素进行累积。reduce函数的定义:reduce(function, sequence[, initial]) -> valuefunction参数是一个有两个参数的函数。reduce依次从sequence中取一个元素,和上一次调用function的结果作为参数,再次调用function。第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。代码示例: >>> reduce(lambda x, y: x + y, [2, 3, 4, 5], 1)
15    ((((1+2)+3)+4)+5)
>>> reduce(lambda x, y: x + y, [2, 3, 4, 5])
14
  filter函数 filter函数会对指定序列执行过滤操作。filter函数的定义:filter(function or None, sequence) -> list, tuple, or stringfunction是一个谓词函数,接受一个参数,返回布尔值True或False。filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果是调用后为True的元素。返回值的类型和参数sequence的类型相同

>>> def is_even(x):
 return x%2==0

>>> filter(is_even, [1, 2, 3, 4, 5, 6])
[2, 4, 6]
>>> filter(is_even, (1, 2, 3, 4, 5, 6))
(2, 4, 6)

简化写法,可以写成filter(lambda x : x%2 == 0, [1, 2, 3, 4, 5, 6])