关于Python中的迭代函数

时间:2019-11-30 16:36:01

标签: python python-3.x

我正在尝试找出是否有更有效的编码方法,但我做不到。谁能帮我找出是否有更有效的编码方法?

下面是代码:

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

谢谢!

2 个答案:

答案 0 :(得分:3)

如果您的意思是较短,那么:

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

似乎您是最快的(但IMO可读性较差)

答案 1 :(得分:1)

如果您真正在寻找速度,则可以进行数学运算并从中删除迭代方面。多项式的总和可以分解为总和,而小的总和可以用类似这样的方法直接求解(如果数量巨大,请注意浮点精度):

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