python中的searchsort如何工作?

时间:2013-03-15 06:16:36

标签: python search sortedlist

让我的问题清楚 如果我有一个阵列a as 出[123]:[1,3,4,6,9,10,54] 当我尝试搜索列表中的数字时,searchsort会返回正确的值但是当我尝试不在列表中的某些内容时,它会返回一个荒谬的值

这里有一些结果

In [131]: a
Out[131]: [1, 3, 4, 6, 9, 10, 54]

In [132]: searchsorted(a,1)
Out[132]: 0

In [133]: searchsorted(a,6)
Out[133]: 3

In [134]: searchsorted(a,[9,54,1])
Out[134]: array([4, 6, 0])

In [135]: searchsorted(a,[9,54,1,0])
Out[135]: array([4, 6, 0, 0])
***> # here 0 is not in the list, but turns up @ position 0***

In [136]: searchsorted(a,740)
Out[136]: 7
***> # here 0 is not in the list, but turns up @ position 7***

为什么会这样?

3 个答案:

答案 0 :(得分:7)

searchsorted告诉你元素属于哪个保证排序:

  

将索引查找到已排序的数组,这样,如果在索引之前插入v中的相应元素,则会保留a的顺序。

在位置7插入740将保留排序,就像在位置0插入0一样。

答案 1 :(得分:3)

searchsorted并未告诉您所在的位置,它会告诉您应该去哪里以保持列表的排序。

因此0必须在1之前的位置0插入。同样,740需要插入位置7,超出列表的当前末尾。

您可以通过阅读文档here

来看到这一点
  

numpy.searchsorted(a,v,side ='left',sorter = None)

     

查找应插入元素以维持顺序的索引。

     

将索引查找到已排序的数组中,如果v中的相应元素在索引之前插入,则将保留a的顺序。

答案 2 :(得分:1)

来自docs

表示它使用binary search来查看已排序列表中项目的插入点。

单词'插入点'表示,如果将项目I插入到排序数组A中的插入点索引N,则数组A将保持按新项目I排序。

[9, 54, 1]这样的例子没有意义,因为数组没有排序。

你可以在python中使用bisect模块做同样的事情,而不是numpy。