关于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值?当我尝试这样做的时候,只会让我不断地给出错误。使用输入功能,我可以修复我的答案,但你需要自己尝试阅读以下内容: