关于Python中的迭代函数

关于Python中的迭代函数,python,python-3.x,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) 提前谢谢 如果你的意思是更短,那么: def iterative(n): return sum(i * (i + 1)

我试图找出是否有一种更有效的方法来编码它,但我做不到。有谁能帮我找出一个更有效的编码方法吗

下面是代码:

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

提前谢谢

如果你的意思是更短,那么:

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看来,您的速度最快,但可读性较差如果您的意思是更短,那么:

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看来,你的速度是最快的,但可读性较差。如果你真的在追求速度,你可以做个数学运算,去掉迭代的部分。多项式的和可以分解为和的和,那些小的和可以直接用这样的方法求解。如果数字很大,请注意浮点精度:

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 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

为了提高内存效率,我会删除[and],这样就不需要分配列表了。非常感谢您的回答。但是,您或任何人有没有想法要求用户输入n值?当我尝试这样做的时候,我只会不断地给出一个错误。使用输入功能,我可以修复我的答案,但你需要自己尝试阅读这里的内容:为了提高内存效率,我会删除[and],这样就不需要分配列表。非常感谢你的回答。但是,您或任何人有没有想法要求用户输入n值?当我尝试这样做的时候,只会让我不断地给出错误。使用输入功能,我可以修复我的答案,但你需要自己尝试阅读以下内容: