如何修复"列表索引必须是整数,而不是列表"

时间:2016-07-29 11:51:32

标签: python typeerror

您好我想知道此代码有什么问题

f = open('test.txt', 'a+')
yourResult = [line.split(',') for line in f.readlines()]
for answer in yourResult:
    print (yourResult[answer])

a = raw_input('What Was That')
Format = (answer + ' : ' + a + ', ')
f.write(Format)
print (Format)
File = open('test.txt', 'r')

4 个答案:

答案 0 :(得分:1)

yourResult[answer]无效,[]期待整数。当你这样做时:

for answer in yourResult:answer列表(感谢bruno desthuilliers)。

你应该这样做:

for answer in yourResult:
    print (answer)

此处,答案为yourResult[0],然后是yourResult[1]等。

答案 1 :(得分:1)

Python的for循环不会产生索引,而是序列本身的项目,因此,在循环内,answer已经是yourResult的元素。我想,你想:

for answer in yourResult:
    print (answer)

作为旁注:

1 / a file对象是可迭代的,因此您不需要使用readlines(),您可以(并且应该)直接遍历文件(它将避免加载整个内容存储器):

2 / open()是上下文管理器,负责正确关闭文件。

您的代码的干净版本将是:

with open('test.txt', 'r') as f:
    yourResult = [line.split(',') for line in f]

for answer in yourResult:
    print(answer)

答案 2 :(得分:0)

当您以这种方式使用a时,answer是yourResult的元素之一,而不是此类元素的索引。
要使用索引执行所需操作,请执行以下操作:

for answer in range(len(yourResult)):
    print(yourResult[answer])

在这种情况下,您将使用索引查看yourResult。

如果没有,你可以这样做:

for answer in yourResult:
    print(answer)

在这种情况下,您直接循环数组内的元素,因此无需通过索引访问它们。

答案 3 :(得分:0)

您无需使用

print(yourResult[answer])
使用

print(answer)

会做我想要的。 由于您已将yourResult创建为列表,因此yourResult [x]期望x为0到len(yourResult)-1之间的数字。 通过做

for answer in yourResult

您正在迭代地为您的结果中的每个项目设置答案。