【发布时间】:2020-11-18 17:36:05
【问题描述】:
我正在学习 python 并正在尝试以下question。这是我想出的代码:
import numpy as np
def f(x):
return x**3-3*x**2-5.5*x+25
x = np.linspace(-3,5,10000)
for i in x:
if f(i)>f(i-1) and f(i)>f(i+1):
max=i
if f(i)<f(i-1) and f(i)<f(i+1):
min=i
print('Coordinates for maxima: ({:.3f},{:.3f})'.format(max,f(max)))
print('Coordinates for minima: ({:.3f},{:.3f})'.format(min,f(min)))
但是,输出超出了我想要的答案,所以我弄乱了它,当我使用以下循环时它完美地工作:
for i in range(1,len(x)-1):
if f(x[i])>f(x[i-1]) and f(x[i])>f(x[i+1]):
max=x[i]
if f(x[i])<f(x[i-1]) and f(x[i])<f(x[i+1]):
min=x[i]
所以我的问题是为什么第二个循环比第一个更好?我认为这两种方法会有相同的输出。
【问题讨论】:
-
您的代码不一样。在您的第二个代码中,您增加/减少索引,在您的第一个代码中,值。
-
另外,您的第二个版本跳过了
x中的第一个元素。 -
@jasonharper - 最后一个元素。否则会产生
index out of bounds错误。 -
没有列表理解。
标签: python loops list-comprehension