从整数列表中,获取最接近给定值的数字。

16 浏览
0 Comments

从整数列表中,获取最接近给定值的数字。

给定一个整数列表,我想找到离我输入的数字最接近的数字:

我的列表 = [4, 1, 88, 44, 3]

我的数字 = 5

有没有快速的方法来做到这一点?

0
0 Comments

问题的出现原因:从给定的整数列表中找到最接近给定值的数字。

解决方法:使用lambda函数和min函数来实现。

代码如下:

takeClosest = lambda num, collection: min(collection, key=lambda x: abs(x - num))
takeClosest(5, [4, 1, 88, 44, 3])

其中,lambda是一种特殊的写法,用于编写匿名函数(即没有名称的函数)。由于lambda是一个表达式,所以可以给它任何想要的名称。

上面代码的长写方式如下:

def takeClosest(num, collection):
    return min(collection, key=lambda x: abs(x - num))

然而,根据PEP 8的建议,不推荐将lambda赋值给名称。

以上就是解决问题的方法。通过lambda函数和min函数,可以从给定的整数列表中找到最接近给定值的数字。

0
0 Comments

(From list of integers, get number closest to a given value)这个问题的出现的原因以及解决方法:

问题出现的原因:当我们有一个整数列表和一个给定的值时,我们想要找到列表中距离给定值最近的数字。

解决方法:我们可以使用二分查找的方法来解决这个问题。首先,我们需要确保列表是排序好的。然后,我们使用Python的bisect模块中的bisect_left函数来找到给定值在列表中的位置。通过比较给定值与当前位置的数字与前一个位置的数字的差值,以及当前位置的数字与后一个位置的数字的差值,我们可以确定哪个数字更接近给定值。最后,我们返回最接近给定值的数字。

对于已排序的列表,使用bisect方法比使用min方法的速度更快。在进行了一系列的测试后,我们发现使用bisect方法的运行时间大约是使用min方法的1/20。即使我们在每次调用take_closest函数时都对列表进行排序,bisect方法仍然是最快的解决方法,尽管只比min方法快约30%。

如果我们不需要对列表进行排序,而是使用未排序的列表,那么使用min方法可能会更快一些。但是,随着列表的增长,排序本身的时间复杂度为O(N log N),因此当列表变得很大时,排序方法将变得更慢。

当我们需要从整数列表中找到距离给定值最近的数字时,可以使用排序后的列表和bisect方法来实现最快的解决方法。如果不需要对列表进行排序,或者列表较小,可以考虑使用min方法来解决这个问题。

0
0 Comments

从上述内容中可以整理出以下问题的出现原因和解决方法:

问题:从给定的整数列表中找到最接近给定值的数字。

原因:当我们需要从一个整数列表中找到最接近给定值的数字时,我们需要一个方法来解决这个问题。

解决方法:

1. 如果我们不能确定列表是否已经排序,可以使用内置的min()函数来找到与指定数字距离最小的元素。

示例代码:

>>> min(myList, key=lambda x:abs(x-myNumber))
   4
   

注意,这个方法也适用于具有整数键的字典,如{1: "a", 2: "b"}。这种方法的时间复杂度为O(n)。

2. 如果列表已经排序,或者你可以支付排序数组一次的代价,可以使用二分法的方法来解决这个问题。这种方法只需要O(log n)的时间复杂度。

示例代码:

参考这个回答

3. 如果还需要返回在列表中发生这种情况的索引,可以创建自己的min函数的实现,将其应用于字典的items()而不是列表,并在最后返回键而不是值。

示例代码:

可以使用numpy.argmin代替min来获取索引而不是值。

以上是从内容中整理出的解决问题的原因和方法。

0