TypeError:'int'对象不可订阅(python)

时间:2015-05-19 11:59:11

标签: python object matrix int multiplication

我在python3中制作矩阵乘法算法时遇到问题。

这是代码:

def matrixMult(m1, m2):
    result = [[0 for x in range(len(m1))] for x in range(len(m2[0]))]
    # Iterate through rows of m1.
    for i in range(len(m1)):
        # Iterate through columns of m2.
        for j in range(len(m2[0])):
            # Iterate through rows of m2.
            for k in range(len(m2)):
                result[i][j] += m1[i][k] * m2[k][j]   # error occurs here.

    return result

尝试在两个随机矩阵上调用它,如下所示:

m = [3, 4, 2]
n = [[13, 9, 7, 15], [8, 7, 4, 6], [6, 4, 0, 3]]
r = matrixMult(m, n)

这会产生TypeError: 'int' object is not subscriptable消息。

我为上面声明的两个矩阵添加了print(type()),它们属于'list'类。对于函数原型中使用的类,类'list'也是如此。地狱,一切都是'list'类型。我不知道int object是什么。

2 个答案:

答案 0 :(得分:3)

您将m1视为嵌套的整数列表:

result[i][j] += m1[i][k] * m2[k][j]
#               ^^^^^^^^

不是;它只是一个简单的整数列表。 m1[i]然后是一个整数对象,你不能索引整数:

>>> [3, 4, 2][0]
3
>>> [3, 4, 2][0][0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'

您可能希望使用 i作为索引:

result[i][j] += m1[i] * m2[k][j]

或仅传递二维数组(因此传入[[3], [4], [2]]而不是[3, 4, 2])。

答案 1 :(得分:1)

您有以下索引操作

m1[i][k]

m1已作为

传递
m = [3, 4, 2]

它只有一个维度来索引,而不是2。