使用这样的for循环:
for k in time :
def byPrice(stock):
st = stock.get_momentum
return st[k]
s = sorted(obj, key=byPrice)
我想按每个stock对象中的动量数组中的第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]
答案 0 :(得分: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 :(得分:1)
您将变量st
设置为实际的类方法stock.get_momentum
,并且方法/函数对象没有基于索引的访问权限。这就是not subscriptable
的含义。
只是一个小小的错字,一直在发生!将st = stock.get_momentum
更改为st = stock.get_momentum()
。