Top n closest numbers from a python list -
i need select amount of numbers list, closest ones other number.
for example:
x0 = 45 n = 3 mylist = [12,32,432,43,54,234,23,543,2] so, how select n numbers list closest ones x0? there built-in method?
topn = [43, 54, 32] the way see below, looks bit convoluted:
diffs = sorted([(abs(x - x0), x) x in mylist]) topn = [d[1] d in diffs[:n]]
use heapq.nsmallest:
heapq.nsmallest(n, iterable[, key]) return list n smallest elements dataset defined iterable. key, if provided, specifies function of 1 argument used extract comparison key each element in iterable: key=str.lower equivalent to: sorted(iterable, key=key)[:n]
so in particular case:
import heapq x0 = 45 n = 3 mylist = [12,32,432,43,54,234,23,543,2] heapq.nsmallest(n, mylist, key=lambda x: abs(x-x0)) this uses less overhead because discards elements exceed n.
Comments
Post a Comment