我想从时间序列中梳理出 n 个最大的极端。heapq 非常适合 nlargest
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 个呢?请注意,我想要原始系列的一个子集,因此 heapify 和反转顺序将不起作用。我想要的本质上是将比较运算符从 gt 重载到 lt。对python中的重载不太熟悉。
一个不太吸引人的选项(假设数值)是在插入之前否定项目,然后否定整个返回堆(返回列表或重新堆否定列表)但这似乎很笨拙,它不再适用于非数字确实有gt和lt。任何优雅的解决方案?