Найти - Пользователи
Полная версия: Нахождение ближайщего числа
Начало » Python для новичков » Нахождение ближайщего числа
1
VladimirDeg
Привет! Помогите справится с одним из условий задачи:
Вам даны список значений в виде множества (Set) и значение, относительно которого, надо найти ближайшее.

Например, мы имеем следующий ряд чисел: 4, 7, 10, 11, 12, 17. И нам нужно найти ближайшее значение к цифре 9. Если отсортировать этот ряд по возрастанию, то слева от 9 будет 7, а справа 10. Но 10 - находится ближе, чем 7, значит правильный ответ 10.

Несколько уточнений:

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

Написал такой код:
 def nearest_value(values: set, one: int) -> int:
    res = sorted(list(values), key=lambda x: abs(x-one))
    return res[0]
print(nearest_value({4, 7, 10, 11, 12, 17}, 9))
Проходят варианты:
assert nearest_value({4, 7, 10, 11, 12, 17}, 9) == 10
assert nearest_value({4, 7, 10, 11, 12, 17}, 8) == 7
assert nearest_value({4, 8, 10, 11, 12, 17}, 9) == 8
assert nearest_value({4, 9, 10, 11, 12, 17}, 9) == 9
assert nearest_value({4, 7, 10, 11, 12, 17}, 0) == 4
assert nearest_value({-6, -2, 4, 7, 12, 17}, -4) == -6
assert nearest_value({4, 7, 10, 11, 12, 17}, 100) == 17
assert nearest_value({5, 10, 8, 12, 89, 100}, 7) == 8
assert nearest_value({5}, 5) == 5
assert nearest_value({5}, 7) == 5

Ошибка с таким вариантом:
nearest_value({0, -2}, -1)
Your result:0
Right result:-2
py.user.next
  
>>> def nearest_value(values: set, one: int) -> int:
...     res = sorted(list(values), key=lambda x: (abs(x-one), x))
...     return res[0]
... 
>>> nearest_value({0, -2}, -1)
-2
>>> 
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 9) == 10
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 8) == 7
>>> assert nearest_value({4, 8, 10, 11, 12, 17}, 9) == 8
>>> assert nearest_value({4, 9, 10, 11, 12, 17}, 9) == 9
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 0) == 4
>>> assert nearest_value({-6, -2, 4, 7, 12, 17}, -4) == -6
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 100) == 17
>>> assert nearest_value({5, 10, 8, 12, 89, 100}, 7) == 8
>>> assert nearest_value({5}, 5) == 5
>>> assert nearest_value({5}, 7) == 5
>>>
VladimirDeg
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB