【python】实现阶乘x!

y=x!=1*2*3*……*x

1.   循环实现

def f(n):
    m = 1
    for i in range(n+1):
        m  *= i
    return m

def f(n):
    m=1
    while n>1:
        m=m*n
        n-=1
    return m
print f(5)
2.  递归实现
def f(n):
    if n>1:
        return n*f(n-1)
    else:
        return 1
print f(5)

def f(n):
    p = 1
    if n > 1:
        p = n*f(n-1)
        print p
    return p
print f(5)

3.  reduce方法

def foo(n):
    return reduce(lambda x,y: x*y, range(1,n+1))

reduce函数:解析

python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。

def myadd(x,y):   
    return x+y   
sum=reduce(myadd,(1,2,3,4,5,6,7))   
print sum

#结果就是输出1+2+3+4+5+6+7的结果即2

当然,也可以用lambda的方法,更为简单:

sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))   
print sum 

lambda 变量名:表达式

ps:有个列表:['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee']。需要找节点最多的一个(节点间由.分割)。看似简单的工作,要用pythonic的方法来做,还是要对python的内置函数有一定程度的熟悉,比如这里可以用最熟悉不过的max,但是会用到它并不常用的可选参数:key

node_list = ['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee']
max_node = max(node_list, key=lambda n: n.count('.'))

在这里,使用key参数改变了max比较列表元素的方法,达到了完成任务的目的

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值