map函数
来看一下map函数的参数与返回值
map(func, *iterables) --> map object
>>> 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 ,即函数对象本身。
很多情况下,也可以使用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
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的参数:
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)) # 否则为<filter object at 0x0000017B601C6F40>对象
# 运算结果
[2, 4, 6, 8, 10]
这里filter函数的两个参数第一个是过滤方法,第二个是需要过滤的列表,将列表里面的元素依次带入函数中进行运算,得到的结果如果为True时,将此结果作为新的filter对象保留,等待函数里面的列表执行完成后,返回最终的值,这里的值为列表,也就是过滤掉了False的数据或元素。