Как найти два максимальных числа в питоне
Перейти к содержимому

Как найти два максимальных числа в питоне

  • автор:

Поиск максимального значения в списке на Python

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

Сначала давайте вкратце рассмотрим, что такое список в Python и как найти в нем максимальное значение или просто наибольшее число.

Список в Python

В Python есть встроенный тип данных под названием список (list). По своей сути он сильно напоминает массив. Но в отличие от последнего данные внутри списка могут быть любого типа (необязательно одного): он может содержать целые числа, строки или значения с плавающей точкой, или даже другие списки.

Хранимые в списке данные определяются как разделенные запятыми значения, заключенные в квадратные скобки. Списки можно определять, используя любое имя переменной, а затем присваивая ей различные значения в квадратных скобках. Он является упорядоченным, изменяемым и допускает дублирование значений. Например:

 
list1 = ["Виктор", "Артем", "Роман"] list2 = [16, 78, 32, 67] list3 = ["яблоко", "манго", 16, "вишня", 3.4]

Далее мы рассмотрим возможные варианты кода на Python, реализующего поиск наибольшего элемента в списке, состоящем из сравниваемых элементов. В наших примерах будут использоваться следующие методы/функции:

  1. Встроенная функция max()
  2. Метод грубой силы (перебора)
  3. Функция reduce()
  4. Алгоритм Heap Queue (очередь с приоритетом)
  5. Функция sort()
  6. Функция sorted()
  7. Метод хвостовой рекурсии

№1 Нахождение максимального значения с помощью функции max()

Это самый простой и понятный подход к поиску наибольшего элемента. Функция Python max() возвращает самый большой элемент итерабельного объекта. Ее также можно использовать для поиска максимального значения между двумя или более параметрами.

В приведенном ниже примере список передается функции max в качестве аргумента.

Найти два максимальных элемента массива

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

Задачу можно решить разными способами. Наиболее простой для понимания - это использование двух переборов массива. В первом ищется первый максимум. Во втором - второй, при этом первый максимальный элемент исключается с помощью условного оператора if . Пример кода программы:

const N = 10; var a: array[1..N] of integer; i, max1, max2: byte; begin randomize; for i := 1 to N do begin a[i] := random(10); write(a[i]:3); end; writeln; max1 := 1; for i := 2 to N do if a[i] > a[max1] then max1 := i; if max1 = 1 then max2 := 2 else max2 := 1; for i := 1 to N do if i <> max1 then // чтобы пропустить max1 if a[i] > a[max2] then max2 := i; writeln('Максимумы: ', a[max1], ' и ', a[max2]); end.

Здесь переменные max1 и max2 хранят не значения элементов, а их индексы (по индексу всегда можно получить значение).

Выражение if max1 = 1 then max2 := 2 else max2 := 1; необходимо по следующей причине. Мы не знаем, какое начальное значение следует присвоить переменной max2 . Ведь если первый наибольший элемент будет первым, и мы присвоим max2 значение 1, то никогда не найдем второй наибольший.

В цикле, определяющем второй максимум, сначала проверяется, не совпадает ли номер текущего элемента с уже учтенным в max1 . Только после этого происходит сравнение значения текущего элемента со значением элемента с индексом max2 .

Пример выполнения кода:

 4 8 0 9 5 8 6 5 4 6 Максимумы: 9 и 8

вывести два максимальных элемента списка без сортировки

Кто там говорил, что в одну строчку не получится? Если ищем только разные элементы, то легко:

a = [2, 2, 3, -15, 2, -7, -12, 2, 3] print(max(a), max(x for x in a if x != max(a))) 

Или ещё вариант с фильтром вместо списочного включения:

print(max(a), max(filter(lambda x: x != max(a), a))) 

P.S. Я потестировал скорость, в общем, лучше прямо вот так как я написал не делать, а вынести max(a) в отдельную переменную и в однострочнике использовать уже эту переменную, а не дёргать всё время на сравнениях max(a) . Ну и в целом это просто прикольные решения, не самые, конечно, быстрые.

Решите задачи на Python

Уровень B. Заполните массив случайными числами и найти два максимальных элемента массива и их номера.
Пример:
Массив:
5 5 3 4 1
Максимальный элемент: A[1]=5
Второй максимум: A[2]=5
Уровень C. Введите массив с клавиатуры и найдите (за один проход) количество элементов, имеющих максимальное значение.
Пример:
Массив:
3 4 5 5 3 4 5
Максимальное значение 5
Количество элементов 3

Голосование за лучший ответ

user = int(input("Введите количество элементов массива: "))
lst = []
for i in range(user):
lst.append(random.randint(-100, 100))
maximum = lst[0]
for i in lst:
if i > maximum:
maximum = i
print("Массив:", lst)
lst.remove(maximum)
maximum2 = lst[0]
for i in lst:
if i > maximum2:
maximum2 = i
print("Первый максимум:", maximum)
print("Второй максимум:", maximum2)

user_count = int(input("Введите количество элементов массива: "))
lst = []
for i in range(user_count):
lst.append(int(input("Введите " + str(i + 1) + " элемент: ")))
dct = <>
maximum = lst[0]
for i in lst:
if i > maximum:
maximum = i
if i in dct:
dct[i] += 1
else:
dct[i] = 1
print("Максимальное значение:", maximum)
print("Количество элементов:", dct[maximum])

l = random.sample(range(10000000), k=60)
m1 = max(l)
l.remove(m1)
m2 = max(l)
print("Первый максимум:", m1)
print("Второй максимум:", m2)

2.
l = list(map(int, input('Значени массива чрез пробел: ').split(' ')))
m = max(l)
print("Максимальное значение:", m)
print("Количество элементов:", l.count(m))

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

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