Port r69838: Speedup and simplify negative counter using count's new step argument.

This commit is contained in:
Raymond Hettinger 2009-02-21 22:10:18 +00:00
parent 934896dc09
commit bd171bcfc4
1 changed files with 3 additions and 3 deletions

View File

@ -130,7 +130,7 @@ __all__ = ['heappush', 'heappop', 'heapify', 'heapreplace', 'merge',
'nlargest', 'nsmallest', 'heappushpop'] 'nlargest', 'nsmallest', 'heappushpop']
from itertools import islice, repeat, count, tee, chain from itertools import islice, repeat, count, tee, chain
from operator import itemgetter, neg from operator import itemgetter
import bisect import bisect
def heappush(heap, item): def heappush(heap, item):
@ -413,13 +413,13 @@ def nlargest(n, iterable, key=None):
# When key is none, use simpler decoration # When key is none, use simpler decoration
if key is None: if key is None:
it = zip(iterable, map(neg, count())) # decorate it = zip(iterable, count(0,-1)) # decorate
result = _nlargest(n, it) result = _nlargest(n, it)
return list(map(itemgetter(0), result)) # undecorate return list(map(itemgetter(0), result)) # undecorate
# General case, slowest method # General case, slowest method
in1, in2 = tee(iterable) in1, in2 = tee(iterable)
it = zip(map(key, in1), map(neg, count()), in2) # decorate it = zip(map(key, in1), count(0,-1), in2) # decorate
result = _nlargest(n, it) result = _nlargest(n, it)
return list(map(itemgetter(2), result)) # undecorate return list(map(itemgetter(2), result)) # undecorate