关于Python中的迭代函数

2024-04-18 07:42:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着找出是否有更有效的方法来编码它,但我做不到。谁能帮我找出是否有更有效的方法来编码它?你知道吗

代码如下:

def iterative(n): 
     sum = 0 
     for i in range(1,n+1): 
         form = i*(i+1)**2 
         sum = sum + form
     return(sum)

提前谢谢!你知道吗


Tags: 方法代码inform编码forreturndef
2条回答

如果你真的在寻找速度,你可以只做数学运算,从中去掉迭代方面。多项式的和可以分解成和的和,那些小和可以用这样的方法直接求解(如果数字很大,请注意浮点精度):

def iterative4(n):
        return (n * (n + 1)//2)**2 + (n * (n + 1) * (2 * n + 1))//3 +  (n * (n + 1))//2

例如,这里的计算速度快了几个数量级—您可以用n=10000000计算值,大约15000次,而迭代方法只需一次:

def iterative1(n):
    return sum(i * (i + 1) ** 2 for i in range(1, n + 1))

def iterative4(n):
    return (n * (n + 1)//2)**2 + (n * (n + 1) * (2 * n + 1))//3 +  (n * (n + 1))//2


x =  time.time()
print(iterative4(10000000))
print(time.time() - x) 

#2500001166666841666675000000
#0.00030493736267089844

x =  time.time()
print(iterative1(10000000))
print(time.time() - x)

#2500001166666841666675000000
#4.789726972579956

如果你是说更短,那么:

def iterative(n):
    return sum(i * (i + 1) ** 2 for i in range(1, n + 1))


print(iterative(10))

对所有答案进行了效率测试:

def iterative1(n):
    return sum(i * (i + 1) ** 2 for i in range(1, n + 1))


def iterative2(n):
    sum = 0
    for i in range(1, n + 1):
        form = i * (i + 1) ** 2
        sum = sum + form
    return (sum)

def iterative3(n):
    return sum(map(lambda i: i*(i+1)**2, range(1,n+1)))

import time

x = time.time()
print(iterative1(10000000))
print( time.time() - x) # 5.313434600830078

x =  time.time()
print(iterative2(10000000))
print(time.time() - x) # 5.021821975708008

x =  time.time()
print(iterative3(10000000))
print(time.time() - x) # 5.61063551902771

看起来你的是最快的(但在我看来可读性较差)

相关问题 更多 >