我是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]
我错过了什么?在
@0x5453你在哪里,但我无法想象。在
我在Stack西班牙语版本中得到了@FJSevilla的answer:
在列表理解中,不应将属性用作内部变量。当您这样做时:
重写属性
^{pr2}$self.MatPagos
和self.test2
的值,在第二次迭代中,这两个属性都是整数,而不是初始列表。做一些类似的事情:我建议您在可能的时候使用
for
。它是更“Python”和更有效率。如果迭代self.MatPagos
的所有行,则它将是:相关问题 更多 >
编程相关推荐