其中包含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])
这是发生错误的地方。如果i
,j
已经int
,我就无法解决该问题。
答案 0 :(得分:5)
i
和j
不是索引;它们是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
时,j
或0
中的最后一个条目。 enumerate()
function为循环添加索引。
这假设您已在T
预先构建了列表结构的嵌套列表。
答案 1 :(得分:3)
for i in lines:
for j in lines:
i
和j
遍历lines
的元素,而不是索引。这意味着i
和j
始终是列表,整行数字。
如果你想查看指数(通常你没有,但这可能是最好的选择),你想要
for i in range(len(lines)):
for j in range(len(lines[i])):
这在设计上很尴尬,因为Python设计人员希望人们默认迭代序列的元素。
另请注意,您的循环尝试在第一行之前和第一列之前访问lines
的元素。也许你想在第二行和第二行开始你的循环。