# Finding N Largest(Smallest) items in Python with Heapq

A simple way to return the N largest or smallest elements using the heapq module in Python 3.

Let’s look at this list.

``x = [1, 3, 7, 21, -90, 67, 42, 12]``

Now we want to write a Python script to return the 2 largest elements in the list.

A simple way would be to scan the whole list and find the maximum value at the current state. Then append it to a new list and remove the value from the original list. You continue this process for as many (N) numbers as you want.

``````x = [1, 3, 7, 21, -90, 67, 42, 12]

def max_finder(lst, N, result_lst = list()):
while N > 0:
max_value = max(lst)
result_lst.append(max_value)
lst.remove(max_value)
N-=1
return result_lst

print(max_finder(x, 2))``````

The above script will return you the 2 largest elements in the python list.

``[67, 42]``

The same process can be used for finding the 2 smallest elements of the list.

``````x = [1, 3, 7, 21, -90, 67, 42, 12]

def min_finder(lst, N, result_lst = list()):
while N > 0:
min_value = min(lst)
result_lst.append(min_value)
lst.remove(min_value)
N-=1
return result_lst

print(min_finder(x, 2))``````

This will return you

``[-90, 1]``

Now especially if you are a beginner, I would highly recommend you trying to solve this way. This is a great way to learn the various nuances of Python.

But Python is known for its awesome modules. By importing a module, you can accomplish the same task with much lesser lines of code. For the above problem, you can use the `heapq` module in Python.

Heapq is already part of the standard library in Python. Hence no need to install it.

Let’s find out the 2 largest or smallest numbers from the list using heapq.

For that purpose, we can use the `nlargest` and the `nsmallest` functions respectively.

``````import heapq

x = [1, 3, 7, 21, -90, 67, 42, 12]

print(heapq.nlargest(2, x))
>>> [67, 42]

print(heapq.nsmallest(2, x))
>>> [-90, 1]``````

We can also use heapq with a python dictionary. In order to do that, we have to pass in a `key` parameter inside our heapq methods.

``````import heapq

laptop_costs = {
'Compaq':499,
'Dell':530,
'Apple':999,
'HP':750,
'ASUS':650
}

# The 2 cheapest laptops
key_values = zip(laptop_costs.values(), laptop_costs.keys())
print(heapq.nsmallest(2, key_values))
>>> [(499, 'Compaq'), (530, 'Dell')]

# The 2 expensive laptops
key_values = zip(laptop_costs.values(), laptop_costs.keys())
print(heapq.nlargest(2, key_values))
>>> [(999, 'Apple'), (750, 'HP')]``````

Recommended articles