您的位置:首页 > 编程语言 > Python开发

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

2013-04-02 19:58 501 查看
#分析:
#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)) )

#问题一步步拆解还是很好解决的,不是么
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息