2017-08-08 20 views
-1

列表使用for循环是这样的:使用分类排序的对象

for k in time : 
     def byPrice(stock): 
      st = stock.get_momentum 
      return st[k] 
     s = sorted(obj, key=byPrice) 

我想每个股票对象中的势头数组中的第k个项目进行排序stock对象的列表。

class stock: 
    def __init__(self, name, price): 
     self.name = name 
     self.lens = len(price) 

    def get_momentum(self): 
     momentum = [] 
     for i in np.arange(lens): 
      count = close[i]/close[i-60] 
      momentum.append(count) 
     return momentum 

但是我得到了一个警告,说'method' object is not subscriptable。并且误差是在该行st[k]

+1

你没有调用'get_momentum'。做'st = stock.get_momentum()' –

回答

2

只需加括号:

for k in time : 
     def byPrice(stock): 
      st = stock.get_momentum() 
      return st[k] 
     s = sorted(obj, key=byPrice) 

您需要实际调用你的方法。否则,st是方法对象,而st[k]是没有意义的。

你也可以做到这一点没有定义byPrice

s = sorted(obj, key=lambda stock:stock.get_momentum()[k]) 

(可以说是难读,虽然)。或者你可以在循环外定义byPrice,并将k作为另一个参数。

1

您正在将变量st设置为实际的类方法stock.get_momentum,并且方法/函数对象没有基于索引的访问。这就是not subscriptable的意思。

只是一个小小的错字,发生在所有的时间!将st = stock.get_momentum更改为st = stock.get_momentum()