@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


Как можно это сделать не таким топорным образом через условия? через функцию, которая будет находить по списку, диапазон и присваивать значение.
  • Вопрос задан
  • 416 просмотров
Решения вопроса 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))


Для очень длинного списка стоит предварительно построить по списку бинарное дерево чтобы уменьшить количество проверок.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Taus
Бинарный поиск из стандартной библиотеки.
import bisect
print(bisect.bisect_left(l, a))
Ответ написан
Комментировать
AnkoII
@AnkoII
Студент
def r(a, l):
    b = 0
    for i, d in enumerate(l):
        if a > d:
            b = i + 1
    return b
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
можно так попробовать:
l = [100, 200, 300, 400, 500]
x = 288
print(min([ind for ind, i in enumerate(l) if i > x]))
Ответ написан
Комментировать
JRazor
@JRazor
Senior StarkOverFlow Programmer
(value - 1)/100
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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