索引错误:列表超出范围

问题描述:

from string import Template 
from string import Formatter 
import pickle 
f=open("C:/begpython/text2.txt",'r') 
p='C:/begpython/text2.txt' 
f1=open("C:/begpython/text3.txt",'w') 
m=[] 
i=0 
k='a' 
while k is not '': 
    k=f.readline() 
    mi=k.split(' ') 
    m=m+[mi] 
    i=i+1 

print m[1] 

f1.write(str(m[3])) 
f1.write(str(m[4])) 

x=[] 
j=0 
while j<i: 
    k=j-1 
    l=j+1 
    if j==0 or j==i: 
     j=j+1 
    else: 
     xj=[] 
     xj=xj+[j] 
     xj=xj+[m[j][2]] 
     xj=xj+[m[k][2]] 
     xj=xj+[m[l][2]] 
     xj=xj+[p] 
     x=x+[xj] 
     j=j+1 

f1.write(','.join(x)) 




f.close() 
f1.close() 

它说线33,XJ = XJ + M [1] [2] 具有索引错误,列表超出范围索引错误:列表超出范围

请帮助 由于事先

+2

请解释你正在尝试做什么,以及你想要回答什么问题。此外,格式化您的代码。 – vezult 2010-05-27 03:16:32

+0

您赢得了额外的积分,用于制造无法读取的Python代码。 * facepalm * – jathanism 2010-05-27 03:54:29

+1

呃,可能是我见过的最丑陋的Python代码。你在做什么? – 2010-05-27 06:41:05

IndexError异常(列表索引超出范围)意味着您尝试使用超出数组范围的索引来访问数组。你可以用一个简单的例子是这样的行动看到这一点:

>>> a = [1, 2, 3] 
>>> a[2] 
3 
>>> a[3] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
IndexError: list index out of range 

我不能确切地按照你的代码,但是这是什么错误意味着之一:

  • l超过m界限或
  • 2超过m[l]

假设我的界限为10然后上的最后一次运行while循环j是9,现在你有l = j + 1,所以l将是10,但是你的10行m被索引为0..9,所以m [l] [2]将给出索引错误。

此外,你的代码看起来好了很多,如果你刚刚添加的元素到列表中一气呵成,即:

X = X + J,M [J] [2],M [K] [2],m [l] [2],p]

空格是一个眼睛最好的朋友!

+1

+1:Spaces *是*眼睛最好的朋友! – Johnsyweb 2010-05-27 03:55:28