Python 给定一个值,在排序数组中查找上下两个值
例如,我有数组xPython 给定一个值,在排序数组中查找上下两个值,python,arrays,numpy,Python,Arrays,Numpy,例如,我有数组x x = [10, 100, 1000, 10000] 如果我有600这个数字,那么我如何才能得到100作为下限值,1000作为上限值 假设输入已排序,我们可以使用来获取索引,其中600可以按排序顺序放置,然后简单地使用索引和一次性移位索引来获取索引时的下限和上限,如下所示- idx = np.searchsorted(x,600) out = x[idx-1], x[idx] 样本运行- In [41]: x = [10, 100, 1000, 10000] In [4
x = [10, 100, 1000, 10000]
如果我有600这个数字,那么我如何才能得到100作为下限值,1000作为上限值 假设输入已排序,我们可以使用来获取索引,其中
600
可以按排序顺序放置,然后简单地使用索引和一次性移位索引来获取索引时的下限和上限,如下所示-
idx = np.searchsorted(x,600)
out = x[idx-1], x[idx]
样本运行-
In [41]: x = [10, 100, 1000, 10000]
In [42]: idx = np.searchsorted(x,600)
In [44]: x[idx-1], x[idx]
Out[44]: (100, 1000)
我们也可以使用,我相信会快一点-
import bisect
idx = bisect.bisect_left(x,600)
假设输入已排序,我们可以使用以排序顺序放置
600
的索引,然后简单地使用索引和一次性移位索引来获得索引时的下限和上限,如下所示-
idx = np.searchsorted(x,600)
out = x[idx-1], x[idx]
样本运行-
In [41]: x = [10, 100, 1000, 10000]
In [42]: idx = np.searchsorted(x,600)
In [44]: x[idx-1], x[idx]
Out[44]: (100, 1000)
我们也可以使用,我相信会快一点-
import bisect
idx = bisect.bisect_left(x,600)
);检查当前数值是否大于测试值;如果是的话。这可能会更容易 假设一个排序列表。;检查当前数值是否大于测试值;如果是的话。
这可能会更容易
假设一个排序列表。很好,但我会警告OP检查边缘情况,例如在搜索数组的最小值和最大值之外的值时,例如
0
或10001
:idx=np.searchsorted(x,0);x[idx-1],x[idx]
给出(10000,10)
和idx=np.searchsorted(x,10001);x[idx-1],x[idx]
给出了索引器:列表索引超出范围
@StevenRumbalski良好的观点。OP需要澄清这些边缘情况的期望下限和上限。谢谢!我永远不会遇到值超出最小值/最大值的情况,但我会警告OP检查边缘情况,例如在搜索数组的最小值和最大值之外的值时,例如0
或10001
:idx=np.searchsorted(x,0);x[idx-1],x[idx]
给出(10000,10)
和idx=np.searchsorted(x,10001);x[idx-1],x[idx]
给出了索引器:列表索引超出范围
@StevenRumbalski良好的观点。OP需要澄清这些边缘情况的期望下限和上限。谢谢!我永远不会遇到值超出最小值/最大值的情况