IndexError:使用列表时列出索引超出范围

时间:2012-03-03 01:51:23

标签: list indexing python-3.x

我正在尝试运行以下脚本,但收到错误

IndexError: list index out of range

我已经读过这是因为当你创建一个列表时,它最初是空的,所以你需要为它分配一些我通过以下方式完成的值

q.append(0)

但我仍然得到错误。有人能指出我做错了什么吗?谢谢!

import numpy
from numpy import *
import matplotlib.pyplot as plt

pfa = []                        #Create lists that will hold pf,qf values
qfa = []
pf = []
qf = []
p = []
q = []
pf.append(0)
qf.append(0)
p.append(0)
q.append(0)
q[0]  = -0.5         # initial p and q values
p[0]  = 0
h = 0.001
for i in range(10):

  k1 = -h*sin(q[i])
  j1 = h*(p[i])
  k2 = -h*sin(q[i]+(1/2)*j1)
  j2 = h*p[i]*(q[i]+(1/2)*k1)             
  k3 = -h*sin(q[i]+(1/2)*j2)
  j3 = h*p[i]*(q[i]+(1/2)*k2)
  k4 = -h*sin(q[i]+(1/2)*j3)
  j4 = h*p[i]*(q[i]+(1/2)*k3)
  pf[i+1] = p[i] +(h/6.0)*(k1+2*k2+2*k3+k4)
  qf[i+1] = q[i] +(h/6.0)*(j1+2*j2+2*j3+j4)
  pfa.append(pf)                   #append lists
  qfa.append(qf)

plt.plot(qfa,pfa)
plt.show()

追溯和错误

Traceback (most recent call last):
File "C:\Documents and Settings\My Documents\Symplectic Integrators\RK4_2.py", line  23, in <module>
j1 = h*(p[i])
IndexError: list index out of range

1 个答案:

答案 0 :(得分:2)

您的列表仅包含一个元素,并且您正尝试访问位置0到9的成员。想一想:

>>> p = []
>>> p.append(0)
>>> p
[0]
>>> for i in range(2):
...     print "position {0}, value {1}".format(p[i], i)
... 
position 0, value 0
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: list index out of range

执行p[i]后,p的大小必须至少为i + 1

看看你的pf[i] == p[i],这是一个表达,而不是作业。

也许您需要的是:

pf = []
for i in range(10):
    ...
    # at this point pf.append() assigns to position i

    pf.append(p[i] + (h / 6.0) * (k1 + 2*k2 + 2*k3 + k4))
    ...

但要小心,因为p需要包含for循环之前所需的所有值。