python的list index out of range

102行错误list index out of range,应该怎样解决呢?

import pandas as pd
import numpy as np
import math

df = pd.read_excel("pdata.xlsx")#读取资料

WM, WUM, WLM, WDM = 140, 20, 70, 50
W0, WU0, WL0, WD0 = 140, 20, 70, 50
B, C =0.3, 0.16
WMM = WM * (1 + B)
IM = 0.002
FC = 24
CG = 0.98
Kc = 0.97
FC = 10.0

df["P"] = df["和多布"] * 0.33 + df["马山"] * 0.14 + df["高潭"] * 0.33 + df["宝口"] * 0.20#算面平均降雨量
df["Ep"] = df["Eo"] * Kc#算蒸发能力
P = list(df["P"])
Ep = list(df["Ep"])

EU = []
EL = []
ED = []
E =[]
PE = []
a = []
R = []
WU = []
WL = []
WD = []
W = []

#计算第一天
#EU
if WU0 + P[0] >= Ep[0]:
    EU.append(round(Ep[0],1))
else:
    EU.append(round(WU0 + P[0],1))
#EL
if WU0 + P[0] >= Ep[0]:
    EL.append(round(0,1))
elif WU0 + P[0] < Ep[0] and WL0 >= C * WLM:
    EL.append(round((Ep[0] - EU[0]) * WL0 / WLM))
elif WU0 + P[0] < Ep[0] and WL0 < C * WLM and WL0 >= C * (Ep[0] - EU[0]):
    EL.append(round(C * (Ep[0] - EU[0])))
else:
    EL.append(round(WL0,1))
#ED
if WU0 + P[0] < Ep[0] and WL0 < C * (Ep[0] - EU[0]):
    ED.append(round(C * (Ep[0] - EU[0]) - EL[0]))
else:
    ED.append(round(0,1))
#
E.append(round(EU[0] + EL[0] + ED[0],1))
PE.append(round(P[0] - E[0],1))

#计算R
if PE[0] > 0:
    a.append(round(WMM * (1 - pow((1 - W0/WM), (1 / (1 + B)))),1))
    if a[0] + PE[0] <= WMM:
        R.append(round(PE[0] - WM * pow((1 - a[0] / WMM), B + 1) + WM * pow((1 - (PE[0] + a[0])) / WMM), B + 1))
    else:
        R.append(round(PE[0] - (WM - W0),1))#这里写的W0
else:
    R.append(round(0,1))
    a[0] = 0
#计算WU
if WU0 + PE[0] - R[0] <= WUM:
    WU.append(round(WU0 + PE[0] - R[0],1))
else:
    WU.append(round(WUM,1))
#计算WL
if WU0 + WL0 + PE[0] - R[0] <= WUM + WLM:
    WL.append(round(WU0 + WL0 + PE[0] - R[0] - WUM,1))
else:
    WL.append(round(WLM,1))
#计算WD
if WU0 + WL0 + WD0 + PE[0] - R[0] <= WUM + WLM + WDM:
    WD.append(round(WU0 + WL0 + WD0 + PE[0] - R[0] - WUM - WLM,1))
else:
    WD.append(round(WDM,1))
#计算W
W.append(round(WU[0] + WL[0] + WD[0],1))
print(P)
print(Ep)
print(EU)
print(EL)
print(ED)
print(E)
print(PE)
print(a)
print(R)
print(WU)
print(WL)
print(WD)
print(W)
#计算第二天及之后
for i in range(1,365):
    
#EU
    if WU[i-1] + P[i] >= Ep[i]:
        EU.append(round(Ep[i],1))
    else:
        EU.append(round(WU[i-1] + P[i],1))
#EL
    if WU[i-1] + P[i] >= Ep[i]:
        EL.append(round(0,1))
    elif WU[i-1] + P[i] < Ep[i] and WL[i-1] >= C * WLM:
        EL.append(round((Ep[i] - EU[i]) * WL[i-1] / WLM))
    elif WU[i-1] + P[i] < Ep[i] and WL[i-1] < C * WLM and WL[i-1] >= C * (Ep[i] - EU[i-1]):
        EL.append(round(C * (Ep[i] - EU[i])))
    else:
        EL.append(round(WL[i-1],1))
#ED
    if WU[i-1] + P[i] < Ep[i] and WL[i-1] < C * (Ep[i] - EU[i]):
        ED.append(round(C * (Ep[i] - EU[i]) - EL[i]))
    else:
        ED.append(round(0,1))
#
    E.append(round(EU[i] + EL[i] + ED[i],1))
    PE.append(round(P[i] - E[i],1))
#计算R
    if PE[i] > 0:
        a.append(round(WMM * (1 - pow((1 - W[i-1]/WM), (1 / (1 + B)))),1))
        if a[i] + PE[i] <= WMM:
            R.append(round(PE[i] - WM * pow((1 - a[i] / WMM), B + 1) + WM * pow((1 - (PE[i] + a[i])) / WMM), B + 1))
        else:
            R.append(round(PE[i] - (WM - W[i-1]),1))#这里写的W0
    else:
        R.append(round(0,1))
        a[0] = 0
#计算WU
    if WU[i-1] + PE[i] - R[i] <= WUM:
        WU.append(round(WU[i-1] + PE[i] - R[i],1))
    else:
        WU.append(round(WUM,1))
#计算WL
    if WU[i] + WL[i-1] + PE[i] - R[i] <= WUM + WLM:
        WL.append(round(WU[i] + WL[i-1] + PE[i] - R[i] - WUM,1))
    else:
        WL.append(round(WLM,1))
#计算WD
    if WU[i] + WL[i] + WD[i-1] + PE[i] - R[i] <= WUM + WLM + WDM:
        WD.append(round(WU[i] + WL[i] + WD[i-1] + PE[i] - R[i] - WUM - WLM,1))
    else:
        WD.append(round(WDM,1))
#计算W
    W.append(round(WU[i] + WL[i] + WD[i],1))


索引错误. 第99行的365是怎么来的?
解决方法: 查看数据本身的最大长度是否超过了366(365+1, 因为从0开始算,这是出错的问题点.

越界了

数组越界,大概率是结束时的那个值越界,没有过程数据和原始数据,只能猜了,打印一下最后一个i值就可以验证了

出现这个错误的原因可能是WU、P和Ep列表的长度不足以满足你的循环需求,确认一下这三个list的长度大于i-1