時系列からn個の最大の極値をくしでとかしたいと思います。heapqは最も大きいものに対して完全に機能します
def nlargest(series, n):
count = 0
heap = []
for e in series:
if count < n:
count+=1
hp.heappush(heap, e)
else:
# keeps heap size fixed
hp.heappushpop(heap,e)
''' note: heap[0] is smallest '''
return heap
しかし、n個の最小値はどうですか?元のシリーズのサブセットが必要なので、ヒープ化して順序を逆にすると機能しないことに注意してください。私が欲しいのは、本質的に、比較演算子をgtからltにオーバーロードすることです。Pythonでのオーバーロードについてはあまり詳しくありません。
あまり魅力的でないオプションは(数値を想定して)挿入する前にアイテムを否定し、次にリターンヒープ全体を否定することです(リストを返すか、否定されたリストを再ヒープします)が、これは厄介なようで、非数値では機能しなくなりますgtとltがあります。エレガントなソリューションはありますか?