@onhorou

Как найти в каком диапазоне находится число?

Есть упорядоченный список:
l = [100, 200, 300, 400, ,500]
Функция получает число a.
Нужно установить в каком диапазоне находится число и присвоить значение y.
if a <= 100:
    y = 0
elif a <= 200:
    y = 1
elif a <= 300:
    y = 2
elif a <= 400:
    y = 3
else:
    y = 4


Как можно это сделать не таким топорным образом через условия? через функцию, которая будет находить по списку, диапазон и присваивать значение.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 2
@Rioran
Excel & VBA senior
Мой вариант. Список встроен в функцию, на вход получаем строго "а". Всё, что будет больше ПРЕДпоследнего элемента - запишется в последнюю группу, даже если больше последнего элемента.

def group_place(a):
    l = [100, 200, 300, 400, 500]
    for i in range(0, len(l)):
        if a <= l[i]: break
    return i
Ответ написан
@Sir_MaNiAl
Для коротких списков вполне можно просто обойти все элементы.

def get_group(value, sorted_list):
    for i, breakpoint in enumerate(sorted_list):
        if value < breakpoint:
            return i
    # значение больше последнего в списке
    return len(sorted_list)


l = [100, 200, 300, 400, 500]
print(get_group(215, l))


Для очень длинного списка стоит предварительно построить по списку бинарное дерево чтобы уменьшить количество проверок.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@Taus
Бинарный поиск из стандартной библиотеки.
import bisect
print(bisect.bisect_left(l, a))
Ответ написан
LaRN
@LaRN
Senior Developer
можно так попробовать:
l = [100, 200, 300, 400, 500]
x = 288
print(min([ind for ind, i in enumerate(l) if i > x]))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы