Найти ближайшии числа в списке

Vitys

Новичок
Пользователь
Янв 14, 2022
26
1
3
sp = [10,20,30,40,50,100,150,200,250] # список эталон
value = [46,96]
print (50,100) # ближайшее число в списке эталон
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
sp = [10,20,30,40,50,100,150,200,250]
value = [46,96]
for i in value:
    sp.sort(key=lambda x: abs(x-i))
    print(sp[0])
 

Vitys

Новичок
Пользователь
Янв 14, 2022
26
1
3
возможны ли другие варианты решения
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Например так:
Python:
sp = [10, 20, 30, 40, 50, 100, 150, 200, 250]
value = [46, 96]
sp.sort()
for i in value:
    for j in range(len(sp)):
        if sp[j] > i:
            if j == 0:
                print(sp[j-1])
            elif abs(sp[j]-i) < abs(sp[j-1]-i):
                print(sp[j])
            else:
                print(sp[j-1])
            break
    else:
        print(sp[-1])
Но чем тебе не нравится первый вариант?
 

Vitys

Новичок
Пользователь
Янв 14, 2022
26
1
3
Спасибо. Ответ нашел.
У меня не совсем полноценный Python
решение:
Python:
sp = [10,20,30,40,50,100,150,200,250]
value = [46,96]
xx = []
for i in value:
   sp.sort(key=lambda x:abs(x-i))
   xx.append(sp[0])
OUT = xx
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Чтобы не создавать отдельный список можно передать end=' ', тогда строка тоже не будет переноситься
Python:
sp = [10,20,30,40,50,100,150,200,250]
value = [46,96]
for i in value:
    sp.sort(key=lambda x: abs(x-i))
    print(sp[0], end=' ')

P.s. как вставлять код
1647162378032-png.1702
 

Vitys

Новичок
Пользователь
Янв 14, 2022
26
1
3
Код из #6 строки не работает
(Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript
операция не выполнена.unexpected token '=')
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
тут 5 строк...
 

Vitys

Новичок
Пользователь
Янв 14, 2022
26
1
3
Sorry: не строка, а сообщение #6
Буду признателен, если можно записать код в одну строчку
xx = []
for i in value:
sp.sort(key=lambda x:abs(x-i))
xx.append(sp[0])
OUT = xx
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
OUT = [sorted(sp, key=lambda x: abs(x-i))[0] for i in value]
 

Vitys

Новичок
Пользователь
Янв 14, 2022
26
1
3
Спасибо
 

Форум IT Специалистов