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

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

  • автор:

Решение задачи Ближайшее число с Mccme

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

Код

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

#include using namespace std; int main() < int n, t, k = 0, res, idx; cin >> n; vector a(n); for(int i = 0; i < n; ++i) cin >> a[i]; cin >> t; res = abs(t - a[0]); idx = a[0]; for(int i = 1; i < a.size(); ++i)< if(abs(t - a[i]) < res)< res = abs(t - a[i]); idx = a[i]; >> cout
&nbsp &nbsp &nbsp &nbsp &nbsp

Автор: Администратор

Python-сообщество

[RSS Feed]

  • Начало
  • » Центр помощи
  • » найти ближайшее число, меньше заданного, в списке

#1 Июль 1, 2014 14:50:40

vrabey От: Киев Зарегистрирован: 2013-04-17 Сообщения: 209 Репутация: 23 Профиль Отправить e-mail

найти ближайшее число, меньше заданного, в списке

например:
есть отсортированный список целых чисел:

sp = [0, 5, 19, 33, 56, 71, 75] 

и есть случайное число
функция должна вернуть

написал так:

random_list = [0, 5, 19, 33, 56, 71, 75] def number_near(n): if n in random_list: return n random_list.append(n) random_list.sort() return random_list.pop(random_list.index(n) - 1) print number_near(59) 

подскажите более оптимальный (правильный) вариант

#2 Июль 1, 2014 16:20:29

terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail

найти ближайшее число, меньше заданного, в списке

a = [0, 5, 19, 33, 56, 71, 75] def f(n): if na[0]: return "n меньше всех" for i in a: if n  i: return x x = i else: return "n больше всех" print f(59) 

#3 Июль 1, 2014 16:23:40

terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail

найти ближайшее число, меньше заданного, в списке

если не хотите создавать еще одну переменную, то можно так

a = [0, 5, 19, 33, 56, 71, 75] def f(n): if na[0]: return "n меньше всех" for i, j in enumerate(a): if n  j: return a[i-1] else: return "n больше всех" print f(59) 

#4 Июль 1, 2014 16:43:39

terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail

найти ближайшее число, меньше заданного, в списке

может выглядит и не так красиво как у вас, но работает раза в 3 быстрее! может есть и более красивые методы, но все они сводятся к этому.

#5 Июль 1, 2014 17:15:11

vrabey От: Киев Зарегистрирован: 2013-04-17 Сообщения: 209 Репутация: 23 Профиль Отправить e-mail

найти ближайшее число, меньше заданного, в списке

terabayt
может выглядит и не так красиво как у вас, но работает раза в 3 быстрее

да спасибо действительно быстрее — чевото я перемудрил
думал если список например содержит 2000000 чисел а заданное число — 1999999,
то как то не рационально перебирать весь список,
но у меня получилось ещё менее рационально

#6 Июль 1, 2014 17:21:03

terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail

найти ближайшее число, меньше заданного, в списке

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

Python ФКН: 10) Линейный поиск

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

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

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

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

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

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

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

Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 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.4k 4 4 золотых знака 25 25 серебряных знаков 52 52 бронзовых знака

Понимаю, что вам могла не понравиться моя правка, но считаю что моя правка сделала ответ лучше. Рекомендуется 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
  • поиск

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

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