第七章第6讲:python的高阶函数-map、reduce、filter
1.map()函数:
map()函数接收2个参数,一个是函数,一个是序列(list)
map()将传入的函数依次作用到序列的每个元素上,并把结果作为新的序列(list)
# 案例要求:讲一个纯数字的list中的值,都变成平方,且放在另一个list中 # 方式1:通过传统的for方式实现要求 print("方式1:") def f(x): return x * x L = [] for n in [1,2,3,4]: L.append(f(n)) print(L) # ========================= # 方式2:通过map()函数 print("方式2:") def f(x): return x * x print(list(map(f,[1,2,3,4]))) 结果: 方式1: [1, 4, 9, 16] 方式2: [1, 4, 9, 16]
2.reduce()函数:
reduce()函数是把一个函数作用到一个序列上(list)
reduce()函数必须接收2个参数,reduce把结果继续和list中的下一个元素累计计算
from functools import reduce def add(x,y): return x + y # 案例1 print("案例1:") L = [1,2,3,4] print(reduce(add,L)) # 案例2 print("案例2:") M = [1,2,3] def fn(x,y): return x * 10 + y L = [1,2,3] print(reduce(fn,L)) 结果: 案例1: 10 案例2: 123
3.filter()函数
filter()也是要接收2个参数,1个是函数,1个是list
filter()函数把传入的函数依次作用到每一个元素上,然后根据返回值是true还是false来决定是否显示(是否丢弃)
# 案例1:模拟一个list,删掉其中的偶数,只保留奇数 print("案例1:") def div(n): return n % 2 == 1 L = [1,2,3,4,5,6,7] print(list(filter(div,L))) # 案例2,:把一个list中的空字符串去掉 print("案例2:") def Noempty(s): return s and s.strip() L = ['L','','E',None,'0',''] print(list(filter(Noempty,L))) 结果: 案例1: [1, 3, 5, 7] 案例2: ['L', 'E', '0']