请问各位老师,这个代码怎么解

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