как работает поиск в python?

Чтобы сделать мой вопрос ясным, если у меня есть массив a, как Out [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*** 

почему это происходит?

    searchsorted сообщает вам, где элемент принадлежит гарантийному заказу:

    Найти индексы в отсортированном массиве а так , чтобы, если соответствующие элементы из v были вставлены перед индексами, порядок а сохранится.

    вставка 740 в положение 7 сохранит порядок, как бы вставляя 0 в положение 0.

    из документов в нем указано, что он использует двоичный поиск для определения точки вставки элемента в отсортированном списке.

    слово «точка вставки» означает, что если элемент I вставлен в индекс точки вставки N в отсортированном массиве A, массив A останется отсортированным с новым элементом I.

    ваши примеры, например [9, 54, 1] , бессмысленны, поскольку массив не отсортирован.

    вы можете использовать модуль bisect в python, чтобы сделать то же самое, без numpy.

    searchsorted не говорит вам, где это происходит, он говорит вам, куда нужно идти, чтобы отсортировать список.

    Таким образом, 0 должно быть вставлено в позицию 0, до 1 . Аналогично, 740 необходимо вставить в положение 7 за пределами текущего конца списка.

    Вы можете это увидеть, прочитав здесь документы:

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

    Найдите индексы, где элементы должны быть вставлены для поддержания порядка.

    Найти индексы в отсортированном массиве а так, чтобы, если соответствующие элементы из v были вставлены перед индексами, порядок а сохранится.