实用高阶函数map,reduce,filter

map函数


来看一下map函数的参数与返回值

map(func, *iterables) --> map object

func:代表传入参数为函数,这里的函数指定指向函数的函数名,
*iterables:代表参数指定的可迭代的,
返回值:返回处理好的数据
map()函数:是将传入的func函数作用于,可迭代的数据里面每个元素,并将处理好的新的结果返回

 

>>> def fun_a(x):
...   return x * 10
...
>>> list_a = map(fun_a, [1, 2, 3, 4, 5])
>>> list(list_a)
[10, 20, 30, 40, 50]

map() 传入的第一个参数是 fun_a ,即函数对象本身。

print(map(str, [1, 2, 3, 4, 5]))

打印结果为: 

所以要将其转化为list类型

很多情况下,也可以使用for循环也可以解决问题,但实际上map作为高级函数,将运算抽象化,还可计算复杂的函数,例如将列表的元素int类型转换为int类型,只需要一行代码:

>>> list(map(str, [1, 2, 3, 4, 5]))
['1', '2', '3', '4', '5']

reduce函数

注意使用reduce函数时需要先导入,reduce函数是在 functools模块里面的;

from functools import reduce
reduce(function, sequence[, initial]) -> value

function:一个有两个参数的函数
sequence:是一个序列,是一些数据的集合,或者是一组数据,可迭代对象
initial:可选,初始参数
返回值:返回函数计算的结果
reduce()函数,使用function函数(有两个参数)先对集合中的sequence第 1、2 个元素进行操作,如果存在
initial参数,则将会以sequence中的第一个元素和initial作为参数,用作调用,得到的结果再与sequence中的
下一个数据用 function 函数运算,最后得到一个结果。

from functools import reduce
list_a = [1, 2, 3, 4, 5]
def fun_b(x, y):
  return x + y
print(reduce(fun_b, list_a))
# 运算结果如下
15

 依次按照顺序从列表list_a中提取两个元素作为参数,进入fun_b中进行运算,得到的结果,作为下次运算时的其中一个参数,再从列表中取出一个元素,再进行运算。最终得到的结果是总和的计算。

filter函数

Python内建的 filter() 函数用于过滤序列,和 map() 类似, filter() 也接收一个函数和一个序列
但是不同的是 filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定元素的保留与丢弃;
看一下filter的参数:

filter(function, iterable)

function:判断函数。
iterable:序列,(可迭代对象)。
返回值:返回列表
filter函数,序列(可迭代对象)的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中 。

 

def not_odd(num):
  return n % 2 == 0
newlist = filter(not_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))    # 否则为对象
# 运算结果
[2, 4, 6, 8, 10]

这里filter函数的两个参数第一个是过滤方法,第二个是需要过滤的列表,将列表里面的元素依次带入函数中进行运算,得到的结果如果为True时,将此结果作为新的filter对象保留,等待函数里面的列表执行完成后,返回最终的值,这里的值为列表,也就是过滤掉了False的数据或元素。
 

你可能感兴趣的:(python,leetcode,算法)