0

我试图在 python 中运行这个程序,但它一直给我一个错误,即列表索引超出 if 语句行的范围。但它确实会在必须打印的地方打印出“找到的匹配项”。

import csv
with open('/Users/jadhav/Documents/Hubble files/m4_hubble_1.csv') as f:
    bl = [[],[],[],[],[]]
    reader = csv.reader(f)
    for r in reader:
        for c in range(5):
            bl[c].append(r[c])

print "The files have now been sorted into lists"
for c in range(0,999):
    if bl[4][c] == "HST_10775_64_ACS_WFC_F814W":
        print "match found"
    else:
        del bl[0][c] 
        del bl[1][c] 
        del bl[2][c] 
        del bl[3][c]
        del bl[4][c]
4

2 回答 2

1

看起来文件少于 999 行,所以bl增长不够。添加异常处理,预先计算最大索引或以不同方式迭代元素。

于 2012-07-02T18:32:31.767 回答
0

您不应该从您正在迭代的列表中删除项目。

首先你检查bl[0][0],然后删除bl[0][0],导致后面的被向下移动。现在列表中有 999 个项目。

然后你正在检查bl[0][1],这是以前bl[0][2]的(原来 bl[0][1]是 now bl[0][0])。

等等。

最终,当c是 500 时,列表中只有 500 项。IndexError

于 2012-07-02T19:47:30.013 回答