pythonic путь, как найти, ли значение между двумя значениями в списке

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

Список идет как это: [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, как это, хотя короткий, бит взглядов бельма. Спасибо за Ваше время!

7
задан tm_lv 19 December 2009 в 20:56
поделиться

2 ответа

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

Редактировать:

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

20
ответ дан 6 December 2019 в 08:43
поделиться
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")
1
ответ дан 6 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: