【发布时间】:2012-03-21 12:14:46
【问题描述】:
我正在尝试运行以下脚本,但出现错误
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
【问题讨论】:
-
您正在访问
q[i],其中i大于0(这是您的最大索引)。你期望它做什么?只需使用0作为值?在这种情况下,您首先需要创建一个足够大的列表:qf = [0,0,0,0,0,0,0,0,0,0]或qf = [0 for _ in range(10)](它们是等效的)。你也可以defaultdict(int),也许吧。 -
我将
p.append(0) q.append(0) pf.append(0) qf.append(0)放入循环中,现在我没有收到错误 -
是的,但仅仅因为它修复了错误,它不一定是正确的方法。最好在循环之前正确初始化列表。
-
@Niklas 你的权利我会试一试
-
@NiklasB.your way works,但我现在在
pf[i+1] = p[i] +(h/6.0)*(k1+2*k2+2*k3+k4) IndexError: list assignment index out of range这一行遇到了同样的错误错误,我也按照你对 pf 列表的建议做了。
标签: list indexing python-3.x