列表索引超出范围

时间:2011-08-11 21:37:01

标签: python list

#!/usr/bin/python

import os,sys
from os import path

input = open('/home/XXXXXX/ERR001268_1', 'r').read().split('\n')

at = 1
for lines in range(0, len(input)):
    line1 = input[lines]
    line4 = input[lines+3]
    num1 = line1.split(':')[4].split()[0]
    num4 = line4.split(':')[4].split()[0]
    print num1,num4


    at += 1

但是我得到了错误:列表索引超出范围

这里有什么问题?

除了"at +=1"之外,还有其他方法可以完成这个循环循环吗? THX

4 个答案:

答案 0 :(得分:2)

问题是lines的最大值为len(input)-1,但您line4lines + 3。因此,当您在最后几行时,lines + 3将大于列表的长度。

for lines in range(0, len(input)):
    line1 = input[lines]
    line4 = input[lines+3]
    num1 = line1.split(':')[4].split()[0]
    num4 = line4.split(':')[4].split()[0]
    print num1,num4

答案 1 :(得分:1)

让我们说len(input) == 10range(0, len(input))迭代[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。当行> 6,你试图访问input[lines+3],它显然是一个IndexError,因为没有index[10][11]等。

如果line1.split(':')[4] line1.count(":") < 4at也会引发IndexError。

我不理解上一个break部分,似乎没有做任何事情,但你可以使用input语句轻松打破循环。

另外,命名变量input是一个坏主意,因为它与内置range(0, len(input)) == range(len(input))函数冲突。而且{{1}},所以0作为范围的第一个参数是不必要的。

答案 2 :(得分:0)

您似乎想要读取一个文件并从每3行获取一些信息。我会建议更简单的东西:

def get_num(line):
    return line.split(':')[4].split()[0]

nums1 = [get_num(l) for l in open(fn, "r").readlines()]
nums2 = nums1[3:]
for i in range(len(nums2)):
    print nums1[i],nums2[i]

最后3个数字的nums1将不会被写入。变量at在代码中没有任何作用。

答案 3 :(得分:0)

我遇到了类似的问题,这是我提出的解决方案:

tuple = (1,2,3)

dogs = [ ]

cats = [ ]

one_two = [ ]

cats.apend(tuple)

dogs.apend(tuple)

file.apend(one_two)

file.apend("/")

print file
print cats
print dogs

度过美好的一天。