def getState(data, t, n): d = t - n + 1 # block = data[d:t + 1] if d>= 0 else -d * [data[0]]+ data[0:t+1] block = data[d:t + 1] res = [0 for x in range(0, n)] #res = [] for i in range(n - 1): print("res=",res[i]) res.append(block[i + 1]-block[i]) #print("res=",res[i]) return np.array([res]) #return np.array([res])
File "C:/Users/86138/Desktop/stockPrediction-master/yunfuzai_main.py", line 79, in getState
res.append(block[i + 1]-block[i])
IndexError: list index out of range
我原先就想解决过界问题,所以我加了
res = [0 for x in range(0, n)],结果还是过界了,想问问怎么解决呢
for i in range(len(block) - 1):
越界的不是 res,而是 block。打印一下 block 的size,再打印一下每个循环 i 的值,应该能找到问题
你上面那个block=data[d:t+1]中t+1越界了,导致block长度并没有n。
比如:
当你t大于data列表长度时,block的长度会小于n。
如果切片结束的值大于列表的长度,就会把切片结束的值自动替换为列表的长度。
比如
data=[1,2,3,4,5,6] #列表的长度为6
t=6
n=4
d = t - n + 1 #d就是3
block = data[d:t + 1] # 就是data[3:7],但是data列表的长度为6,没有第7个元素,就自动替换为data[3:6]
block的值是[4,5,6] 长度为3
for i in range(n - 1): #这样i循环从0到2 (n-1=3),
block[i + 1] 当i的值是2时就下标越界了
所以不能用n的值来循环,应该获取block的长度来循环
for i in range(len(block) - 1):
或者说如果按你原本代码,t的值就不能大于data列表的长度-1