@Taler_Du

Python поиск ближайшего значения?

Задача: Найдите ближайшее значение к переданному.

Вам даны список значений в виде множества (Set) и значение, относительно которого, надо найти ближайшее.
Несколько уточнений:

Если 2 числа находятся на одинаковом расстоянии - необходимо выбрать наименьшее из них;
Ряд чисел всегда не пустой, т.е. размер >= 1;
Переданное значение может быть в этом ряде, а значит оно и является ответом;
В ряде могут быть как положительные, так и отрицательные числа, но они всегда целые;
Ряд не отсортирован и состоит из уникальных чисел.

Решение предлагают такое:
def nearest_value(values: set, one: int) -> int:
    return min(values, key=lambda n: (abs(one - n), n))

Как работает часть (abs(one - n), n)?
  • Вопрос задан
  • 7943 просмотра
Пригласить эксперта
Ответы на вопрос 2
@twistfire92
Python backend developer
(abs(one - n), n) - кортеж с элементами abs(one - n) (модуль разности чисел) и n
Ответ написан
@pablos-v
Сперва кажется что достаточно выражения abs(one - n),
но тогда не выполняется условие "Если 2 числа находятся на одинаковом расстоянии - необходимо выбрать наименьшее из них",
например set {0, -2} и one = -1
Здесь одинаковая разница в 1, но выбрать нужно минимальное, т.е. -2
Именно для этой цели нужно сравнивать не только разницу, но и номинал из множества. В вашем коде это сделано через кортеж, а можно и списком
min(values, key=lambda n: [abs(one - n), n])

Или же можно отсортировать множество, тогда будет достаточно abs(one - n), т.к. при одинаковых разностях он выберет первое значение коллекции, а это будет меньшее значение
min(sorted(values), key=lambda n: abs(one - n))
Ответ написан
Ваш ответ на вопрос

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

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