python的filter()、map()、reduce()函数测试

filter函数测试:过滤出奇数

mylist=[n for n in range(0,10)]
new_list = list(filter(lambda x:(x%2==1),mylist))
print(f"{type(new_list)}")
print('new_list=',new_list)

map函数测试:计算每个列表元素的平方

mylist=[n for n in range(0,10)]
new_list = list(map(lambda x:x**2,mylist))
print(f"{type(new_list)}")
print('new_list=',new_list)

reduce函数的测试

功能:用于对序列进行累积操作(如累加、累乘等),最终返回一个单一值。
语法(在 Python 3 中需要从 functools 模块导入):

最简测试

from functools import reduce
total=reduce(lambda x,y:x+y, [1,2,3,4,5])
print(total)

 

计算和的lambda表达式

f = lambda x,y:x+y
print(f(1,2))

 输出结果是3

使用reduce计算列表中所有数的和

from functools import reduce
mylist=[n for n in range(0,10)]
total = reduce(lambda x,y:x+y,mylist)
print(f"{type(total)}")
print('total=',total)

使用reduce计算列表中所有偶数的和

from functools import reduce
mylist=[n for n in range(0,10)]
total = reduce(lambda x,y:x+y,list(filter(lambda x :(x%2==0),mylist)))
print(f"{type(total)}")
print('total=',total)

逐次递减:函数参数的次序问题

测试目的,函数执行的结果总是作为函数下次迭代的第一个参数。

from functools import reduce
mylist=[n for n in range(0,10)]
total = reduce(lambda x,y:x+y,list(filter(lambda x :(x%2==0),mylist)))
print(f"{type(total)}")
print('total=',total)

mylist=[n for n in range(0,10)]
mylist.reverse()
print(mylist)

#8 - 6 - 4 - 2 == -4
total = reduce(lambda x,y:x-y,list(filter(lambda x :(x%2==0),mylist)))
print(f"{type(total)}")
print('total=',total)

字符串转数字

这是在

from functools import reduce
def charToInt(s):
        print('s = ',type(s),s)
        mychars=''.join([chr(n) for n in range(ord('0'),ord('9') + 1)])
        mynumbers=[n for n in range(0,10)]
        mydict=dict(zip(mychars,mynumbers))
        n = mydict[s]
        print("n = ",n)
        return n

x = list(map(charToInt,'4567'))
print('x = ',type(x),x)

 

from functools import reduce
def strToInt(s):
    def fun(x,y):
        return x*10+y
    def charToInt(s):
        print('s = ',type(s),s)
        mychars=''.join([chr(n) for n in range(ord('0'),ord('9') + 1)])
        mynumbers=[n for n in range(0,10)]
        mydict=dict(zip(mychars,mynumbers))
        n = mydict[s]
        print("n = ",n)
        return n
    return reduce(fun,map(charToInt,s))
string='4567'
x = strToInt(string)
print(x)

 

简化上面的代码就是

from functools import reduce
total = reduce(lambda x,y:x*10+y,map(lambda c:dict(zip('0123456789',range(0,10)))[c] ,'4567'))
print('x = ',type(total),total)

小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值