现在的位置: 首页 > 综合 > 正文

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

2013年10月09日 ⁄ 综合 ⁄ 共 781字 ⁄ 字号 评论关闭
#分析:   
#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生成由个单个元素的阶乘的list
map(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)) ) 

#问题一步步拆解还是很好解决的,不是么

抱歉!评论已关闭.