Имея отсортированный список и некоторое случайное значение, я хотел бы найти, в котором диапазоне значение.
Список идет как это: [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
Я задаюсь вопросом, существует ли больше подхода pythonic, как это, хотя короткий, бит взглядов бельма. Спасибо за Ваше время!
>>> import bisect
>>> grid = [0, 5, 10, 15, 20]
>>> value = 8
>>> bisect.bisect(grid, value)
2
Редактировать:
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")