TypeError:list indices必须是整数,而不是list。怎么修?

时间:2014-03-16 00:50:20

标签: python list typeerror indices

其中包含TypeError的代码。 "列表索引必须是整数,而不是列表",尽管它们是整数。我很感激你帮助我找出错误的原因。我需要的是从源7x5选项卡获取具有不同值的矩阵7x5。错误发生在最后一行。

lines = []

with open("text.txt") as f:
    for line in f:
        line = [int(x) for x in line if (x != ' ') and (x != '\n')]
        lines.append(line)
    f.close()

阅读文件后我所拥有的是带有数字的列表列表" lines"。它的整数。不是字符串。像:

>> [[1, 2, 3...], [4, 5, 6...], [7, 8, 9...],[...]]


i = 1
j = 1
T = []
T.append(lines[0][0]) 

我这样做是为了避免在最后一行(IndexError和东西)上i-1(列出超出范围)。虽然,我真的不认为它的蟒蛇方式。我也非常感谢这方面的帮助。

for i in lines:
    for j in lines:
        T[i][j] = lines[i][j] + max(T[i][j-1], T[i-1][j])

这是发生错误的地方。如果ij已经int,我就无法解决该问题。

2 个答案:

答案 0 :(得分:5)

ij不是索引;它们是lines列表中的值。 Python for循环为for-each constructs

使用:

for i, line in enumerate(lines):
    for j, value in enumerate(line):
        T[i][j] = value + max(T[i][j - 1 % len(T[i])] + T[i - 1 % len(T)][j])

其中% len()计算'包围'当T和/或T[i]i时,j0中的最后一个条目。 enumerate() function为循环添加索引。

这假设您已在T预先构建了列表结构的嵌套列表。

答案 1 :(得分:3)

for i in lines:
    for j in lines:

ij遍历lines的元素,而不是索引。这意味着ij始终是列表,整行数字。

如果你想查看指数(通常你没有,但这可能是最好的选择),你想要

for i in range(len(lines)):
    for j in range(len(lines[i])):

这在设计上很尴尬,因为Python设计人员希望人们默认迭代序列的元素。

另请注意,您的循环尝试在第一行之前和第一列之前访问lines的元素。也许你想在第二行和第二行开始你的循环。