Как найти ближайшее число в массиве python
Перейти к содержимому

Как найти ближайшее число в массиве python

  • автор:

Поиск ближайшего по величине числа в списке

Требуется найти ближайшее заданное число в некотором списке на Python 3. Есть ли какой-то встроенный модуль для таких целей? Или какой алгоритм стоит для этого выбрать?

Отслеживать
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак
задан 22 янв 2018 в 3:24
Якимов Герман Якимов Герман
105 1 1 серебряный знак 12 12 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

l = [5, 78, 45, 12, 56, 9999] def nearest(lst, target): return min(lst, key=lambda x: abs(x-target)) print(nearest(l, 52)) 

Отслеживать
ответ дан 22 янв 2018 в 5:24
20.5k 4 4 золотых знака 27 27 серебряных знаков 53 53 бронзовых знака

Понимаю, что вам могла не понравиться моя правка, но считаю что моя правка сделала ответ лучше. Рекомендуется 4 пробела под отступ, добавление пробела до и после арифметического оператора, а также, я считаю, что примеры данных и функции, что с ними работают нужно отделять, поэтому и перенес функцию выше. Плюс, больше примеров использования с наглядным результатом хуже не сделали бы — сразу было бы видно, что будет получено

22 янв 2018 в 11:43

Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.

  • python
  • python-3.x
  • list
  • поиск

Поиск ближайшего значения в Numpy массиве: решение Python

Чтобы найти ближайшее значение в массиве numpy к заданному числу, можно использовать следующую команду:

Скопировать код

import numpy as np # Ваш массив данных array = np.array([1, 2, 3, 5, 6, 7]) value = 3.6 # Поиск ближайшего значения nearest_val = array.flat[np.abs(array – value).argmin()] print(nearest_val) # Вывод: 4

Замените array и value на ваши данные. Данный метод вычисляет абсолютное отклонение значений с применением функции np.abs , определяет индекс минимального элемента с помощью .argmin() и выбирает ближайшее значение.

Подробнее о методах и сценариях

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

Оптимизация отсортированных массивов с использованием np.searchsorted

Если вы работаете с отсортированными массивами, функция np.searchsorted будет очень кстати:

Найти в массиве элемент, самый близкий по величине к данному числу

Author24 — интернет-сервис помощи студентам

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

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

по абсолютному значению).

Во второй строке вводится одно целое число x
, не превосходящее 1000

по абсолютному значению.

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

1 2 3 4 5 6 7 8 9 10 11
a, n, find_num = [int(i) for i in input().split()], int(input()), 100 for i in range(len(a)): if a[i]  n: find_num = -find_num else: find_num = find_num + 0 if a[i] >= n and a[i] - n  find_num - n: find_num = a[i] elif a[i]  n and find_num - n  a[i] - n: find_num = a[i] print(find_num)

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

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

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

Найти в массиве элемент самый близкий к заданному числу
Изучаю новые возможности PascalABC.NET и переделал задание по нахождению ближайшего из списка.

1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6

poiuytjhjhjjjjj, Опишите словами алгоритм, который Вы используете. Мне он не понятен. Например по моему совершенно бессмысленная строка кода

ЦитатаСообщение от poiuytjhjhjjjjj Посмотреть сообщение

find_num = find_num + 0
260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339
Если я правильно понял:

1 2 3 4 5 6 7
def nearest_value(items, value): '''Поиск ближайшего значения до value в списке items''' found = items[0] # найденное значение (первоначально первое) for item in items: if abs(item - value)  abs(found - value): found = item return found

Регистрация: 16.05.2022
Сообщений: 6

Я начинающий так что если тебе не трудно можешь объяснить этот код?

Добавлено через 2 минуты
Можешь объяснить свой код? Я начинающий просто.

1007 / 351 / 59
Регистрация: 28.02.2013
Сообщений: 932

ЦитатаСообщение от kamnii Посмотреть сообщение

можешь объяснить этот код

1 2 3 4 5 6 7 8 9 10 11 12 13
items = [1,2,3,4,5] # список чисел value = 4.2 # число к которому найти ближайшее def nearest_value(items, value): '''Поиск ближайшего значения до value в списке items''' found = items[0] # принимаем допущение что ближайшее число к искомому первое в списке (с индексом 0) for item in items: # для каждого элемента (item) из items (т.е. попеременно item=1, item=2..) # проверяем условие если разница между item value по модулю меньше разницы found и value, то if abs(item - value)  abs(found - value): # если условие истинно (True) found = item # меняем значение нашего допущения на item (т.е. item оказался ближе к искомому значению) return found # возвращаем ближайшее значение до value в списке items print(f'Ближайшее число к в списке является ')

Добавлено через 41 минуту
Как вариант для собственной тренировки:

1 2 3 4 5 6 7 8
items = [1,2,3,4,5] # список чисел value = 4.2 # число к которому найти ближайшее def nearest_value(items, value): abs_list = list(map(lambda item: abs(item - value), items)) # создаем список значений разницы item - value по модулю return items[abs_list.index(min(abs_list))] # находим индекс минимальной разницы и по этому индексу возвращаем элемент из items print(nearest_value(items, value))

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)?

  • Вопрос задан более трёх лет назад
  • 7968 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2
Михаил Кростелев @twistfire92
Python backend developer
(abs(one — n), n) — кортеж с элементами abs(one — n) (модуль разности чисел) и n
Ответ написан более трёх лет назад
Нравится 1 4 комментария
Ну и плюс загуглить, как определены операции сравнения кортежей в питоне
Taler_Du @Taler_Du Автор вопроса

Не понял.
как я понимаю, min ищет минимальное значение в values, ключом мы выполняем предварительное действие abs(one — n), то есть ищем в values минимальное абсолютное значение разницы. А вот второе n там зачем?

Taler_Du, второе — на случай, когда первое одинаково. Например, values = , one = 5.
abs(one — n) даст (4, 1, 1, 2), получили 2 минимальных. Для разрешения такого случая и передаем 2-е число — само значение, т.е. сравнение будет между кортежами (1, 4) и (1, 6), из которых меньшим будет первый, и результатом всей операции будет 4.

Taler_Du @Taler_Du Автор вопроса
o5a, спасибо за такой развернутый ответ. дошло

Сперва кажется что достаточно выражения abs(one — n),
но тогда не выполняется условие «Если 2 числа находятся на одинаковом расстоянии — необходимо выбрать наименьшее из них»,
например set и 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))

Ответ написан более двух лет назад

min(values, key=lambda n: [abs(one — n), n])

зачем тут n после запятой, для чего она нужна?

Ваш ответ на вопрос

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

python

  • Python
  • +3 ещё

Почему не работает код telegram для уведомления о новых видео в python?

  • 1 подписчик
  • 53 минуты назад
  • 11 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *