2017-08-08 4 views
-1

のリストをソートするソートを使用した:このようなループのために使用するオブジェクト

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という警告を受けました。あなたが実際にあなたのメソッドを呼び出す必要が

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

:とエラーが

+1

あなたは 'get_momentum'を呼び出していません。 'st = stock.Stock.get_momentum()'を実行します。 –

答えて

2

st[k]ちょうど括弧を追加行です。それ以外の場合は、stがメソッドオブジェクトで、st[k]は意味を持ちません。

はまた(ただし、読み取りに間違いなく難しい)

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

byPriceを定義せずにこれを行うことができます。あるいは、ループ外にbyPriceを定義し、別の引数としてkを使用することもできます。

1

変数stを実際のクラスメソッドstock.get_momentumに設定していますが、メソッド/関数オブジェクトにはインデックスベースのアクセスがありません。これは、not subscriptableの意味です。

マイナーなタイプミスです。常に発生します。 st = stock.get_momentumst = stock.get_momentum()に変更してください。

関連する問題