Типичный для 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
изменить:
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")