【问题标题】:TypeError: list indices must be integers, not list. How to fix?TypeError:列表索引必须是整数,而不是列表。怎么修?
【发布时间】:2014-04-21 07:36:48
【问题描述】:

里面有 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()

阅读文件后我得到的是带有数字的列表列表,称为“行”。是整数。不是字符串。喜欢:

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


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

我这样做是为了避免最后一行(i-1 和其他东西)上的 IndexError(列表超出范围)。虽然,我不认为它真的是蟒蛇方式。我也很感激这件事的帮助。

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,我不知道应该解决什么问题。

【问题讨论】:

  • 如果 python 运行时告诉你它不是一个整数,那么它就不是一个整数。只需使用一些打印语句对其进行调试,您就可以自己查看...

标签: python list typeerror indices


【解决方案1】:

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])

i 和/或j0 时,% len() 计算“环绕”到TT[i] 中的最后一个条目。 enumerate() function 将索引添加到循环中。

这假设您已经在T 中预先构建了一个嵌套列表结构。

【讨论】:

    【解决方案2】:
    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 的元素。也许您想在第二行和第二列开始循环。

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多