¿Cómo funciona searchsort en python?

Para aclarar mi pregunta, diga si tengo una matriz como fuera [123]: [1, 3, 4, 6, 9, 10, 54] Cuando bash buscar los números en la lista, searchsort devuelve el valor correcto pero cuando Intento algo que no está en la lista, devuelve un valor absurdo

Aquí están algunos de los resultados.

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

¿Por qué está pasando esto?

searchsorted le dice dónde pertenece el elemento para garantizar el pedido:

Encuentre los índices en una matriz ordenada a tal que, si los elementos correspondientes en v se insertaron antes de los índices, se conservaría el orden de a.

la inserción de 740 en la posición 7 mantendría el orden, al igual que la inserción de 0 en la posición 0.

searchsorted no le dice dónde están las cosas , le dice dónde deben ir las cosas para mantener la lista ordenada.

Entonces 0 debería ser insertado en la posición 0, antes de la 1 . De manera similar, se debe insertar 740 en la posición 7, más allá del final actual de la lista.

Puedes ver esto leyendo los documentos aquí :

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

Encuentra índices donde se deben insertar elementos para mantener el orden.

Encuentre los índices en una matriz ordenada a tal que, si los elementos correspondientes en v se insertaron antes de los índices, se conservaría el orden de a.

a partir de los documentos , indica que utiliza la búsqueda binaria para detectar el punto de inserción de un elemento en una lista ordenada.

la palabra ‘punto de inserción’ significa que si el elemento I se inserta en el índice de punto de inserción N en la matriz ordenada A, la matriz A permanecerá ordenada con el nuevo elemento I.

sus ejemplos como [9, 54, 1] tienen sentido ya que la matriz no está ordenada.

puedes usar el módulo bisect en python para hacer lo mismo, sin números.