Python 2.6 bisect_right, возвращающий индекс вместо индекса справа (index + 1) - PullRequest
0 голосов
/ 19 октября 2011

Я использую bisect_right () для поиска в текстовом файле.Каждая строка в текстовом файле содержит следующую строку «word1 word2 (tab) number».То есть два слова разделены пробелом (word1 и word2), табуляцией и числом.Я прочитал файл в виде списка с readlines ().Я использую bisect_right с параметром «word1 word2» (word1 (пусто) word2), чтобы найти индекс в списке, где находится (под) строка «word1 word2».Кажется, что bisect_right находит правильные места и возвращает реальный индекс, в котором находится (под) строка, а не индекс справа.Разве bisect_right не должен возвращать индекс вправо, если (под) строка (word1 (blank) word2) существует в списке?Может ли это быть проблемой при поиске подстроки?

1 Ответ

1 голос
/ 19 октября 2011

Поиск с использованием модуля bisect возвращает «точку вставки», а не индекс. Точкой вставки является местоположение между двумя значениями. Он предназначен для использования таким образом s.insert(i, 'new value').

Вместо точек вставки требуется выполнить поиск индекса значений в последовательности. Примеры в документации, чтобы показать, как это сделать: http://docs.python.org/library/bisect.html#searching-sorted-lists

Конечно, все это работает, только если список строк отсортирован до двоичного поиска, но вы, вероятно, уже знали, что: -)

...