我想跟踪前N个最大值,给出一个输入数据点流(可能非常大)。 N是一个相对较小的数字,让我们说在10s附近,而不是数百或更多。下面的代码有效还是有更好的方法呢?
import heapq
n = 10
topn = []
def push(item):
global topn
if len(topn) >= n:
heapq.heappushpop(topn, item)
else:
heapq.push(topn, item)
答案 0 :(得分:0)
heapq.nlargest()
的实现方式如下:
def nlargest(n, iterable):
"""Find the n largest elements in a dataset.
Equivalent to: sorted(iterable, reverse=True)[:n]
"""
if n < 0:
return []
it = iter(iterable)
result = list(islice(it, n))
if not result:
return result
heapify(result)
_heappushpop = heappushpop
for elem in it:
_heappushpop(result, elem)
result.sort(reverse=True)
return result