索引错误:列表超出范围
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[l][2]出现了索引错误,列表超出范围。
请帮帮我,提前谢谢你。
2 个回答
2
假设 i 是 10,那么在最后一次执行 while 循环时,j 是 9。此时你有 l = j + 1,所以 l 会变成 10。但是你的 m 这个列表的索引是从 0 到 9,所以 m[l][2] 会出现索引错误。
另外,如果你一次性把元素添加到列表中,你的代码看起来会更整洁,比如:
x = x + [j, m[j][2], m[k][2], m[l][2], p]
留点空格对眼睛是最友好的!
1
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]
的范围