1.filter 过滤,批量提取,“筛选”
#需求:取出foo列表里的能被3整除的元素 foo=[2,18,9,22,17,24,8,12,27]
foo=[2,18,9,22,17,24,8,12,27]
result = filter(lambda x: x % 3 == 0,foo)
print(list(result)) #因为过滤出来的是个列表,而,result 是个参数,所以要强制转换成列表
输出结果为:
[18, 9, 24, 12, 27]
2.map 批量处理 “处理” map(处理方式,序列)
#1). 对[1, 2, 3, 4, 5]中的每个元素进行平方运算:
foo2 = [1, 2, 3, 4, 5]
result2 = map(lambda x:x**2,foo2)
print(list(result2))
结果为下:
[1, 4, 9, 16, 25]
#2). 对[1, 3, 5, 7, 9], [2, 4, 6, 8, 10] 两个序列中的元素依次求和。
#注意:当有多个参数时,每个参数的列表的元素个数需相同
foo3 = [1, 3, 5, 7, 9]
foo4 = [2, 4, 6, 8, 10]
result3 = map(lambda x,y: x + y,foo3,foo4)
print(list(result3))
结果为下:
[3, 7, 11, 15, 19]
3.reduce 对参数序列中元素进行总体计算 “总体计算”得到的是一个数值
import functools
result4 = functools.reduce(lambda x,y: x+y,[1,2,3,4,5],1)#有初始值,先运算1(初始值)+1(序列中的)
print(result4)
result5 = functools.reduce(lambda x,y: x+y,[1,2,3,4,5]) #无初始值,先运算1+2(序列中的)
print(result5)
输出结果为:
16
15
高阶函数综合练习
计算 1!+2!+3!+4!+5!的结果值
import functools
#法一:运用,对fo中的每个元素进行阶乘运算,增加表后一个元素的方法
fo = [1,2,3,4,5]
aList = []
for i in range(1,6):
aList.append(functools.reduce(lambda x,y:x*y,fo[0:i]))
print(aList)
sum = functools.reduce(lambda x,y:x+y,aList)
print(sum)
输出结果为:
[1]
[1, 2]
[1, 2, 6]
[1, 2, 6, 24]
[1, 2, 6, 24, 120]
153
#法二:先定义函数jc(num)求阶乘,然后运用map函数对序列进行此函数的运算,在运用reduce函数求各个数字阶乘的和
def jc(num):
if num == 1:
return 1
return num*jc(num-1)
a1 = map(jc,[1,2,3,4,5])
a2 = functools.reduce(lambda x,y:x+y,a1)
print(a2)
输出结果为:
153
#法三:
#a = functools.reduce(lambda x,y:x*y,range(1,6)) #求5的阶乘
b = map(lambda i:functools.reduce(lambda x,y:x*y,range(1,i+1)),range(1,6))#求得1~5每个数字的阶乘
c = functools.reduce(lambda x,y:x+y,b)#阶乘相加计算
print(c)
输出结果为:
153