当前位置: 代码迷 >> python >> 来自python列表的前n个最接近的数字
  详细解决方案

来自python列表的前n个最接近的数字

热度:63   发布时间:2023-07-14 08:43:46.0

我经常需要从列表中选择一定数量的数字,以便它们与其他某个数字最接近。

例如:

x0 = 45
n = 3
mylist = [12,32,432,43,54,234,23,543,2]

那么,如何从列表中选择与x0最接近的n数字? 有一些内置的方法吗?

topN = [43, 54, 32]

我看到的方式如下,但它看起来有点复杂:

diffs = sorted([(abs(x - x0), x) for x in mylist])
topN = [d[1] for d in diffs[:n]]

使用 :

heapq.nsmallest(n, iterable[, key])

返回一个列表,其中包含iterable定义的数据集中的n个最小元素。 key(如果提供)指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键:key = str.lower等效于:sorted(iterable,key = key)[:n]

所以在你的特殊情况下:

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))

这会减少开销,因为它会丢弃超过n元素。

也可以使用自定义函数排序来完成:

sorted(mylist, key = lambda x : abs(x-x0))[:n]

它在时间复杂度方面比heapq.nsmallest慢,但是开销较少,因此对于小型列表更有效。

  相关解决方案