[Python]用一行 map,reduce 计算 5!+4!+3!+2!+1!

来源:互联网 发布:免费数据采集器 编辑:程序博客网 时间:2024/05/29 06:27
#分析:   #5!+4!+3!+2!+1#对于一个数字的阶乘reduce(lambda x,y:x*y,range(1,6))#对于一组数字的加法reduce(lambda x,y:x+y,range(1,6))#如果我们用代数的方法,就是把range[1,6]这个数组换成,每个元素为1-5每个阶乘就行了#[5!,4!,3!,2!,1!]#最笨得方法就是手动写5个,在笨一点就是for循环5个出来 #这是第一个版本,甚至连map都没有def singles():    singles=[]    for i in range(1,6):       t=reduce(lambda x,y:x*y,range(1,i+1))        singles.append(t)     return singles #singles()print reduce(lambda x,y:x+y,singles())#试试把上面一部分精简下,我们发现可以用列表解析[reduce(lambda x,y:x*y,range(1,i+1)) for i in range(1,6)]print reduce(lambda x,y:x+y,[reduce(lambda x,y:x*y,range(1,i+1)) for i in range(1,6)])#但是我们还是没有用到map,原来我们可以用,map生成由个单个元素的阶乘的listmap(lambda z :reduce(lambda x,y:x*y,range(1,z+1)) ,range(1,6))  #好像没办法把后面的元素传递到reduce函数里面,怎么办呢#那我只好把reduce再次封装到一个lambda里了print reduce(lambda x,y:x+y,map(lambda z :reduce(lambda x,y:x*y,range(1,z+1)) ,range(1,6)) ) #问题一步步拆解还是很好解决的,不是么


原创粉丝点击