Самый простой подход - сделайте его вложенным list
и используйте простое арифметическое / приведение типов для поиска:
values = [['A', 'B', 'C', 'D'], ['E', 'F', 'G', 'H']]
lookup = lambda grid, x, y: grid[int(y) // 25][int(x)]
lookup(values, 2.3, 24.99)
# 'C'
lookup(values, 2.5, 25.00)
# 'G'
Если ваши метки по оси Y заданы как неправильный отсортированный список, вы можете использовать bisect
, чтобы найти правильный индекс в логарифмическом времени:
from bisect import bisect
y_axis = [0, 25, 75, 190, 225]
lookup = lambda grid, x, y: grid[bisect(y_axis, y) - 1][int(x)]