IndexError:列出索引超出for循环列表列表的索引

时间:2015-06-05 14:44:05

标签: list python-3.x for-loop file-io

我已经查看了网站上发布的有关索引错误的其他问题,但我仍然不了解如何修复自己的代码。我是Python的初学者。根据用户输入,我想检查输入是否位于列表列表中每行的第四个位置。

以下是代码:

#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

这是我不断得到的错误:

  

没有进入if语句

1 个答案:

答案 0 :(得分:0)

所以,我认为这是你正在尝试做的事情 - 在你的&#34; missionPlan.txt&#34;中找到任何一行。其中第四个单词(在空格上分割后)与输入的数字相匹配,并打印出这些行的第一个单词。

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

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 ......

另外,为了回答你的问题,我似乎无法进入那个声明&#34;观察 - 这是因为您将字符串(listoflists[i][3])与整数(choice)进行比较。上面的代码解决了比较不匹配和检查行中是否有足够的单词来进行有意义的比较......