Skip to content
Advertisement

Finding k closest numbers to a given number

Say I have a list [1,2,3,4,5,6,7]. I want to find the 3 closest numbers to, say, 6.5. Then the returned value would be [5,6,7].

Finding one closest number is not that tricky in python, which can be done using

JavaScript

But I am trying not to put a loop around this to find k closest numbers. Is there a pythonic way to achieve the above task?

Advertisement

Answer

The short answer

The heapq.nsmallest() function will do this neatly and efficiently:

JavaScript

Essentially this says, “Give me the three input values that have the smallest absolute difference from the number 6.5“.

Optimizing for repeated lookups

In the comments, @Phylliida, asked how to optimize for repeated lookups with differing start points. One approach would be to pre-sort the data and then use bisect to locate the center of a small search segment:

JavaScript

For example:

JavaScript
Advertisement