查找列表中哪两个元素最接近python的两个元素的最快方法

时间:2014-04-04 06:13:21

标签: python list

输入是元素和外部项的排序列表。例如:

list_ = [0, 3.5, 5.8, 6.2, 88]
item = 4.4

找出list_ item中哪两个元素介于两者之间的最快方法是什么?例如,在这种情况下,两个数字将是3.5和5.8。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

由于输入已排序,因此您在算法上最好的选择是使用bisect模块 - 例如bisect_left

>>> list_ = [0, 3.5, 5.8, 6.2, 88]
>>> item = 4.4
>>> bisect.bisect_left(list_, item)
2

您想要的项目位于索引bisect_left(list_, item)和<{1}}

这可以为您提供bisect_left(list_, item) - 1次搜索的结果 - 从算法的角度来看,它并没有比这更好。

答案 1 :(得分:3)

您可以使用bisect module's bisect函数获取item适合的索引

list_, item = [0, 3.5, 5.8, 6.2, 88], 4.4
from bisect import bisect
print bisect(list_, item)
# 2

请记住您的list_必须排序,以便能够使用bisect模块中的功能。

答案 2 :(得分:1)

我会使用numpy:

from numpy import *
x = array([0, 3.5, 5.8, 6.2, 88])
item = 4.4

i= argmin(abs(x-item))
print(i)