python高阶函数filter,map,reduce

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值