不断收到 IndexError 消息?

Keep getting IndexError Message?

我正在尝试建立一个项目,在该项目中我使用指数平滑来预测商品价格。我从基本的指数平滑开始,然后逐步进行三次指数平滑。但是,当我使用此代码时

with open('HistoricalData_1617379638571.csv', newline='') as f:
reader = csv.reader(f)
data = list(reader)
df = pd.read_csv('HistoricalData_1617379638571.csv')
df.columns = ['Date','Close/Last','Volume','Open','High','Low']
df.set_index('Date', inplace=True)
print(df)
x=df.loc[:,'Close/Last'].values
y=list(x)

z=[int(i) for i in y]
print(z)
alpha=0.9

def exp_smooth(alpha,z):
   for i in z:
      new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))

   print(new_res)

exp_smooth(alpha,z)

我不断收到错误消息

Traceback (most recent call last):
  File "main.py", line 38, in <module>
    exp_smooth(alpha,z)
  File "main.py", line 34, in exp_smooth
    new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))
IndexError: list index out of range

我做错了什么?我该如何解决这个问题,以便我的指数平滑函数 returns 不是错误?

当您尝试使用列表的值索引列表时,您可能会得到一个不是有效列表索引的值。例如,如果列表是 z=[100000]for 循环将尝试在索引 1000000 处索引 z,这显然不存在。

您可能希望使用 range(len()):

def exp_smooth(alpha, z):
    for i in range(len(z)):
        new_res=z.append((alpha * z[i] + (1 - alpha * z[i-1])))

或者,更好的是,enumerate()

def exp_smooth(alpha, z):
    for index, value in enumerate(z):
        new_res = z.append((alpha * value + (1 - alpha * z[index-1])))