为什么我在方法中遇到此错误:“int”对象不是subscriptab

2024-04-20 10:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python3中的新类。我要做的是重写类中的函数,但是当我运行它时。我有个错误:

<ipython-input-67-42b4fc5729b3> in savage(self)
     11         list1 = list()
     12         while i < len(self.Acciones):
---> 13             self.test3 = [self.MatPagos - self.test2  for self.MatPagos, self.test2  in zip(self.test2,self.MatPagos[0])]
     14             list1.append(self.test3)
     15             i += 1

TypeError: 'int' object is not subscriptable

这是一个函数,它运行得很好:

def Savage(Acciones,MatPagos):
    test = [list(x) for x in zip(*MatPagos)]
    test2 = [max(k) for k in test]

    i = 0
    list1 = list()
    while i < len(Acciones):
        test3 = [MatPagos - test2 for MatPagos, test2 in zip(test2,MatPagos[i])]
        list1.append(test3)
        i += 1

    MatPagos = list1

结果是:

[[0, 0, 3200, 8600], [1200, 1200, 0, 3200], [2400, 2400, 1200, 0]]

我是这样重写的:

^{pr2}$

这些是可变内容:

print(self.MatPagos)
>>> [[200, 3200, 1800, -1800], [-1000, 2000, 5000, 3600], [-2200, 800, 3800, 6800]]
print(self.test)
>>> [[200, -1000, -2200], [3200, 2000, 800], [1800, 5000, 3800], [-1800, 3600, 6800]]
print(self.test2)
>>> [200, 3200, 5000, 6800]

我错过了什么?在


Tags: 函数intestselfforlenziplist
1条回答
网友
1楼 · 发布于 2024-04-20 10:23:52

@0x5453你在哪里,但我无法想象。在

我在Stack西班牙语版本中得到了@FJSevilla的answer

在列表理解中,不应将属性用作内部变量。当您这样做时:

self.test3 = [self.MatPagos - self.test2 for self.MatPagos, self.test2 in zip(self.test2, self.MatPagos[i])]

重写属性self.MatPagosself.test2的值,在第二次迭代中,这两个属性都是整数,而不是初始列表。做一些类似的事情:

^{pr2}$

我建议您在可能的时候使用for。它是更“Python”和更有效率。如果迭代self.MatPagos的所有行,则它将是:

def savage(self):
    self.test = [list(x) for x in zip(*self.MatPagos)]
    self.test2 = [max(k) for k in self.test]

    self.MatPagos  = [[matP - test2 for matP, test2 in zip(self.test2, mprow)] for mprow in self.MatPagos]

相关问题 更多 >