【问题标题】:Python Error "IndexError: list assignment index out of range"Python 错误“IndexError:列表分配索引超出范围”
【发布时间】:2019-07-26 06:11:52
【问题描述】:

我的代码有问题,如果有任何与 cmets 相关的内容,我将不胜感激。 我的问题是我不能从列表中调用元素,尽管在我看来列表足够大。错误是

Traceback (most recent call last):
  File "BrownM.py", line 126, in <module>
    optim1(pbias,x,i,nbias,stock1,cash1)
  File "BrownM.py", line 88, in optim1
    win1[i] = cash1[i] - cash1[i-1]
IndexError: list assignment index out of range

我真的不明白问题出在哪里。也许我使用“.append”太多了?

代码是这样的:

import numpy as np

p0 = []
p0.append(0)
p0[0]=1000.00

ts=10               

dx = 1.0
x = np.random.uniform(0.0,dx)
pbias= np.random.uniform(1.0, 50.0)
nbias= np.random.uniform(0.0, 1.0)

cash1 = []
cash1.append(1)
cash1[0]=100000.0
cash4 = []
cash4.append(1)
cash4[0]=100000.0

stock1=0
stock4=0

win1 = []
win4 = []

def optim1(pbias,x,i,nbias, stock1,cash1):

    if p0[i] <= p0[i-1] + pbias*x :
        stock1= stock1 + 1
        cash1[i] = cash1[i-1] - p0[i]


    elif p0[i] > p0[i-1] + pbias*x :
        if stock1 > 0:
            stock1 = stock1-1
            cash1[i] = cash1[i-1] + p0[i]

    win1[i] = cash1[i] - cash1[i-1]


def pesim1(pbias,x,i,nbias, stock4,cash4):

    if p0[i] < p0[i-1] - nbias*x :
        stock4= stock4 + 1
        cash4[i] = cash4[i-1] - p0[i]

    elif p0[i] >= p0[i-1] - pbias*x:
        if stock4 > 0:
            stock4 = stock4-1
            cash4[i] = cash4[i-1] + p0[i]

    win4[i] = cash4[i] - cash4[i-1]


for i in range(1,ts):
    p0.append(i)
    p0[i] = p0[i-1]

    cash1.append(i)
    win1.append(i)
    cash4.append(i)
    win4.append(i)

    optim1(pbias,x,i,nbias,stock1,cash1)
    pesim1(pbias,x,i,nbias,stock4,cash4)

所以代码不应该打印任何东西,但是在运行时会抛出错误。

再次感谢您能给我的任何帮助或 cmets

【问题讨论】:

  • 追加时,您将括号中的值添加到该列表的末尾。我会在你的代码中添加打印语句,这样你就可以看到发生了什么,我认为它会清楚很多。
  • 确实有帮助,谢谢!

标签: python list for-loop index-error


【解决方案1】:

win1 不够大。在for i in range(1,ts) 的第一次迭代中,您正在访问它的第一个位置索引win1[1],但win1 的长度只有1,因此它只有一个位置索引win1[0]

【讨论】:

  • 谢谢,你是对的。我在想“.append(#)”中的值意味着添加了列表中的空间,所以我使用不正确。
猜你喜欢
  • 2018-10-21
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2020-09-04
  • 1970-01-01
  • 2018-03-19
相关资源
最近更新 更多