[Python]用一行 map,reduce 计算 5!+4!+3!+2!+1!
#分析: #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)) ) #问题一步步拆解还是很好解决的,不是么