Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2022, 08:29   #1
ВитZ
Пользователь
 
Регистрация: 11.09.2022
Сообщений: 13
По умолчанию Поиск ближайших чисел

Python:
a1 = [1.12,1.25,3.1]
b1 = [2,3,4,5]
print(2,2,4) # результат
# в списке a1 найти ближайшее число из списка b1
# не используя округление
ВитZ вне форума Ответить с цитированием
Старый 11.09.2022, 10:56   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

А почему
Код:
print(2,2,4) # результат
Это как?
Понимаю так:
Код:
print(b[0],b[0],b[1]) # результат
А вот 4 - это b[2].

Можно, например, так:
Алгоритм (в общем случае, когда списки не отсортированы):
Код:
1. В цикле по i до len(a1) # смотрим все элементы списка a1
    2. blig = 0  # номер ближайшего (предварительный)
    2а.  delta = abs(a1[i] - b1[blig])  # расстояние (предварительное)
    3. В цикле по j от 1 до len(b1)   # Среди всех элементов списка b1 
        4. Если abs(a1[i] - b1[j]) < delta # ищем ближайшее число по модулю
            4a. blig = j    # номер ближайшего (уточнённый)
            4b. delta = abs(a1[i] - b1[j]) # расстояние (уточнённое)
    5. Конец цикла по j
    6. Вывод: print(a1[i], ' - ближайшее ', b1[blig])
7. Конец цикла по i
PS: Не проверял.
Если условие такое,
Код:
abs(a1[i] - b1[j]) < delta
то это первое ближайшее при просмотре слева направо, иначе
Код:
abs(a1[i] - b1[j]) <= delta
то последнее
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 11.09.2022, 13:32   #3
ВитZ
Пользователь
 
Регистрация: 11.09.2022
Сообщений: 13
По умолчанию

потому что 1.12,1.25 ближайшее для них 2, а 3.1-ближайшее 4
на выходе 2,2,4 # результат
ВитZ вне форума Ответить с цитированием
Старый 11.09.2022, 13:35   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Странно. Мне почему то кажется, что ближайшее к 3.1 это 3, а не 4.
Тогда формулируйте правильно - вам надо округлять в большую сторону
macomics вне форума Ответить с цитированием
Старый 11.09.2022, 13:42   #5
ВитZ
Пользователь
 
Регистрация: 11.09.2022
Сообщений: 13
По умолчанию

да, извиняюсь в большую
ВитZ вне форума Ответить с цитированием
Старый 11.09.2022, 13:47   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда из
Цитата:
Сообщение от ViktorR Посмотреть сообщение
Код:
1. В цикле по i до len(a1) # смотрим все элементы списка a1
    2. blig = 0  # номер ближайшего (предварительный)
    2а.  delta = abs(a1[i] - b1[blig])  # расстояние (предварительное)
    3. В цикле по j от 1 до len(b1)   # Среди всех элементов списка b1 
        4. Если abs(a1[i] - b1[j]) < delta # ищем ближайшее число по модулю
            4a. blig = j    # номер ближайшего (уточнённый)
            4b. delta = abs(a1[i] - b1[j]) # расстояние (уточнённое)
    5. Конец цикла по j
    6. Вывод: print(a1[i], ' - ближайшее ', b1[blig])
7. Конец цикла по i
Достаточно убрать abs
macomics вне форума Ответить с цитированием
Старый 15.09.2022, 08:17   #7
ВитZ
Пользователь
 
Регистрация: 11.09.2022
Сообщений: 13
По умолчанию

Никогда нельзя думать, что ты лучший в своём деле. .......- не качество, а препятствие на пути к успеху(ViktorR можно по понятному, а не .....)
ВитZ вне форума Ответить с цитированием
Старый 15.09.2022, 22:22   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

А зачем вам это надо?
Я не программист. Просто описал алгоритм.
Кое что подсмотрел в Сети.
Что у вас не получается?
Вот ваши списки.
Код:
a1 = [1.12,1.25,3.1]
b1 = [2,3,4,5]
# Так можно записать цикл:
for i in range(len(a1)):           # формируется набор чисел от 0 до len(a1) - длина списка
    blig = 0                       # Номер первого элемента для сравнения
    delta = a1[i] - b1[blig]       # Вычисляем расстояние между числом первого списка и второго списка
    for j in range(1, len(b1)):    # Номера элементов второго списка. От 1 т.к. 0 уже использовали
        if (a1[i] - b1[j] < delta  # Новое расстояние может быть меньше найденного на 
                                   # предыдущем шаге
            blig = j               # Сохраним номер и 
            delta = a1[i] - b1[j]  # найденное расстояние на этом шаге
    print('Тут надо выводить результат'
            ' Возможно это вы сделаете сами')
PS: Набирал в форме ввода и не проверял. Так же не смотрел и результат.
И да, если не прилагать усилий, то рыбку будут кушать другие ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.09.2022, 08:27   #9
ВитZ
Пользователь
 
Регистрация: 11.09.2022
Сообщений: 13
По умолчанию

по этому коду результат последнии числа в списках
Изображения
Тип файла: jpg Прим.jpg (25.5 Кб, 18 просмотров)
ВитZ вне форума Ответить с цитированием
Старый 16.09.2022, 08:40   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
a1 = [1.12,1.25,3.1]
b1 = [2,3,4,5]
# Так можно записать цикл:
for i in a1:                       # формируется набор чисел от 0 до len(a1) - длина списка
    blig = 0                       # Номер первого элемента для сравнения
    delta = 1                      # Вычисляем расстояние между числом первого списка и второго списка
    for j in range(len(b1)):       # Номера элементов второго списка. От 1 т.к. 0 уже использовали
        if i - b[j] < delta        # Новое расстояние может быть меньше найденного на 
                                   # предыдущем шаге
            blig = j               # Сохраним номер и 
            delta = i - b1[j]      # найденное расстояние на этом шаге
    print('Тут надо выводить результат'
            ' Возможно это вы сделаете сами')

Последний раз редактировалось macomics; 16.09.2022 в 09:24.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о паре ближайших точек mishkaPetrovich Помощь студентам 1 16.06.2019 21:02
Поиск в ближайших элементах матрицы. schoolboy99 Помощь студентам 11 28.03.2016 11:24
Бинарный поиск с определением ближайших узлов k281092 Паскаль, Turbo Pascal, PascalABC.NET 4 20.11.2011 21:30
последовательность чисел - поиск максимума, второго после максимума значения, количество чисел равных максимуму wasy96 Паскаль, Turbo Pascal, PascalABC.NET 1 28.09.2011 01:19
Найти 2 ближайших ел-та в массиве neon2k Помощь студентам 3 08.01.2009 02:50