2015-06-05 149 views
0

我已经看过在网站上发布的其他问题有关索引错误,但我仍然不知道如何解决我自己的代码。当谈到Python时,我是一名初学者。根据用户的输入,我想检查输入是否位于列表中每行的第四个位置。IndexError:列表索引超出范围列表中的for循环

下面的代码:

#create a list of lists from the missionPlan.txt 
from __future__ import with_statement 

listoflists = [] 
with open("missionPlan.txt", "r") as f: 
    results = [elem for elem in f.read().split('\n') if elem] 
    for result in results: 
     listoflists.append(result.split()) 
#print(listoflists) 
#print(listoflists[2][3]) 

choice = int(input('Which command would you like to alter: ')) 
i = 0 
for rows in listoflists: 
    while i < len(listoflists): 
     if listoflists[i][3]==choice: 
      print (listoflists[i][0]) 

     i += 1 

这是我不断收到错误:

not getting inside the if statement

+0

首先,'choice'已经是一个整数,所以你不需要'int再次选择)。此外,你的for循环是错误的。你在每次添加一个之后就设置'i = 0',所以它总是为零。修正你的缩进也许? – mbomb007

+0

我已经提出了建议的更改,它仍然给我同样的错误@ mbomb007 – Allie

+0

你不需要stackoverflow;你可以自己解决这个问题。 “i”太大,或者“3”太大。输入一些打印语句来查看数据是什么,然后找出哪个数字太大。不要忘记:计数从零开始,所以如果列表中有三项,则可以使用的最大索引是2. –

回答

0

所以,我认为这是你想要什么 - 发现任何线你的“missionPlan.txt”,其中第四个单词(在分隔空白后)与输入的数字相匹配,并打印这些行的第一个单词。

如果这确实是准确的,那么沿着这条线可能是更好的方法。

choice = int(input('Which command would you like to alter: ')) 

allrecords = [] 

with open("missionPlan.txt", "r") as f: 
    for line in f: 

     words = line.split() 
     allrecords.append(words) 

     try: 
      if len(words) > 3 and int(words[3]) == choice: 
       print words[0] 
     except ValueError: 
      pass 

另外,如果像你的标签建议,您使用Python 3.x中,我相当肯定的from __future__ import with_statement不是特别必要...

编辑:基于添加几行在下面的评论。现在,除了在读取每行时检查每行,并且从每行包含与输入匹配的第四个字段的每行打印第一个字段之外,它还会将每行收集到allrecords列表中,并将其作为列表拆分为单独的单词 - 对应于原始问题listoflists。这将在后面的代码中启用对文件的进一步处理。此外固定一个明显的错误 - 需要line分成words,不f ...

另外,回答你“我似乎无法进去,如果声明”观察 - 那是因为你比较字符串(listoflists[i][3] )与一个整数(choice)。上面的代码解决了比较不匹配问题,并检查一行中是否有足够的字来进行有意义的比较......

+0

这就是我想要做的,但不完全。我正在搜索列表中每行的第四个元素中的数字,并将该数字与输入的数字进行比较。文本文件如下所示: – Allie

+0

0 1 0 12 0 0 0 0 33.545 45.35 154。000 1 1 0 3 11 1 0 0 0 12.101 222.0 451.222 1 2 4 4 4 0 0 0 0 45.222 457.21 4444444 4 – Allie

+0

@Allie鉴于您发布的代码不是您的“列表清单”,只是列表将原始文件的每一行分割成字段列表的结果?上面的代码避免了构建“列表列表”,而是依次查看每行的第四个字段......或者您是否需要“列表列表”以供后续处理? – twalberg

相关问题