2017-08-08 21 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()