Типичный для Python способ, как найти, если значение находится между двумя значениями в списке

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

список выглядит так: [0, 5, 10, 15, 20] А значение, скажем, 8.

стандартным способом было бы либо перейти от начала, пока мы не достигнем значения, которое больше нашего (как в примере ниже), либо выполнить бинарный поиск.

grid = [0, 5, 10, 15, 20]
value = 8
result_index = 0
while result_index < len(grid) and grid[result_index] < value:
    result_index += 1

print result_index

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

2 ответов


>>> import bisect
>>> grid = [0, 5, 10, 15, 20]
>>> value = 8
>>> bisect.bisect(grid, value)
2

изменить:

bisect - алгоритм деления массива


for min, max in zip(grid, grid[1:]): # [(0, 5), (5, 10), (10, 15), (15, 20), (20, 25)]
  if max <= value < min: #previously: if value in xrange(min, max):
    return min, max
raise ValueError("value out of range")