首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:'int‘对象不可订阅(python)

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

Stack Overflow用户
提问于 2015-05-19 11:59:11
回答 2查看 5.8K关注 0票数 1

我在python3中做一个矩阵乘法算法有问题。

这是代码:

代码语言:javascript
复制
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

试图在两个随机矩阵上调用它,像这样:

代码语言:javascript
复制
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是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-19 12:01:10

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

代码语言:javascript
复制
result[i][j] += m1[i][k] * m2[k][j]
#               ^^^^^^^^

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

代码语言:javascript
复制
>>> [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作为索引:

代码语言:javascript
复制
result[i][j] += m1[i] * m2[k][j]

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

票数 3
EN

Stack Overflow用户

发布于 2015-05-19 12:01:23

您有以下索引操作

代码语言:javascript
复制
m1[i][k]

但是m1作为

代码语言:javascript
复制
m = [3, 4, 2]

它只有1维的索引,而不是2。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30325013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档