[Python]用一行 地图,reduce 计算 5!+4!+3!+2!+1
[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生成由个单个元素的阶乘的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)) ) #问题一步步拆解还是很好解决的,不是么