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

Lar*_*eyt 6 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()
Run Code Online (Sandbox Code Playgroud)

读取文件后的内容是带有"行"数字的列表列表.这是整数.不是字符串.喜欢:

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


i = 1
j = 1
T = []
T.append(lines[0][0]) 
Run Code Online (Sandbox Code Playgroud)

我这样做是为了避免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])
Run Code Online (Sandbox Code Playgroud)

这是发生错误的地方.如果已经存在i,我不应该得到什么.jint

Mar*_*ers 5

ij不是指数; 它们是lines列表中的值.Python for循环适用于每个构造.

使用:

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])
Run Code Online (Sandbox Code Playgroud)

% len()计算"回绕"到最后一个条目TT[i]i和/或j0.该enumerate()函数为循环添加索引.

这确实假设您已经预先构建了一个嵌套的列表结构列表T.


use*_*ica 3

for i in lines:
    for j in lines:
Run Code Online (Sandbox Code Playgroud)

ij迭代 的元素lines,而不是索引。这意味着i并且j始终是列表,整行数字。

如果您想查看索引(通常您不会,但这可能是这里的最佳选择),您想要

for i in range(len(lines)):
    for j in range(len(lines[i])):
Run Code Online (Sandbox Code Playgroud)

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

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