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
i而j不是指数; 它们是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()计算"回绕"到最后一个条目T或T[i]时i和/或j有0.该enumerate()函数为循环添加索引.
这确实假设您已经预先构建了一个嵌套的列表结构列表T.
for i in lines:
for j in lines:
Run Code Online (Sandbox Code Playgroud)
i并j迭代 的元素lines,而不是索引。这意味着i并且j始终是列表,整行数字。
如果您想查看索引(通常您不会,但这可能是这里的最佳选择),您想要
for i in range(len(lines)):
for j in range(len(lines[i])):
Run Code Online (Sandbox Code Playgroud)
这在设计上很尴尬,因为 Python 设计者希望人们默认迭代序列的元素。
另请注意,您的循环尝试访问lines第一行之前和第一列之前的元素。也许您想在第二行和第二列开始循环。
| 归档时间: |
|
| 查看次数: |
39463 次 |
| 最近记录: |