索引错误:列表超出范围

0 投票
2 回答
4248 浏览
提问于 2025-04-15 23:13
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] 的范围

撰写回答