Почему код не верен? Python

Напишите программу, которая находит в массиве элемент, самый близкий по величине к данному числу.

Входные данные

В первой строке содержится список чисел — элементы массива (целые числа, не превосходящие 1000 по абсолютному значению).

Во второй строке вводится одно целое число x, не превосходящее 1000 по абсолютному значению.

Выходные данные

Вывести значение элемента массива, ближайшего к x. Если таких чисел несколько, выведите любое из них.

Примеры

Ввод 1 2 3 4 5
     6
Вывод 5

Пример моего кода:

import sys
a=list(map(int,input().split()))
b=int(input())
c=[]
for i in a:
    c.append(b-i)
for i in a:
    if i==b:
        print(b)
        sys.exit()
if min(c)<0:
    d=c.index(max(c))
    print(a[d])
else:
    d=c.index(min(c))
    print(a[d])

В тесте пишет, что код выдает неверный ответ


Ответы (4 шт):

Автор решения: Tehnorobot

Я могу предложить такой вариант решения:

Алгоритм:

  1. Сортирую список чисел
  2. Итерируюсь по списку и нахожу первое превосходящее по значению число к заданному b.
  3. Нахожу соседей числа b, исходя из наибольшего числа из пункта 2, и сравниваю их на близость к заданному числу.
  4. Вывожу первое число или максимальное в списке

Реализация:

a = sorted(list(map(int, input().split())))
b = int(input())

res = []

for num, i in enumerate(a):
    if i >= b:
        if b - a[num - 1] > a[num] - b:
            res.append(a[num])
        else:
            res.append(a[num - 1])
            
if res:
    print(res[0])
else:
    print(max(a))
→ Ссылка
Автор решения: Сhurina Margaery

Вот код:

import sys
a=list(map(int,input().split()))
b=int(input())
c=[]
for i in a:
    c.append(abs(b-i))
d=c.index(min(c))
print(a[d])

abs - берет значение по модулю

→ Ссылка
Автор решения: SergFSM

У встроенной функции min есть необязательный аргумент key который принимает функцию определяющую порядок сравнения элементов:

a = [1,2,3,4,5,7,6,15]
b = 19

m = min(a, key=lambda x: abs(x-b))  # 15

Здесь элементы x сравниваются между собой по абсолютной разнице между ними и заданным значением b . То есть меньшим будет тот у которого эта разница меньше.

→ Ссылка
Автор решения: GovGer
a = sorted(list(map(int, input().split())))
b = int(input())
print(min(a, key=lambda x: abs(x-b)))

вот полный код для этой задачи

→ Ссылка