Нахождение всех позиций максимального числа в списке Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы найти все индексы максимального значения в списке, используйте функцию enumerate в связке со списочным включением. Сначала определите максимальное значение списка с помощью max(list), а потом найдите индексы, на которых значение списка совпадает с максимальным.

Python
Скопировать код
nums = [4, 9, 1, 9, 6, 9]
max_indices = [i for i, val in enumerate(nums) if val == max(nums)]

Приведенный код возвращает список max_indices, в котором содержатся индексы максимального значения списка nums.

Кинга Идем в IT: пошаговый план для смены профессии

Основной алгоритм

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

Python
Скопировать код
max_value = max(nums)
max_indices = [index for index, value in enumerate(nums) if value == max_value]

При работе с пустыми списками, укажите параметр default для функции max(), чтобы избежать ошибок:

Python
Скопировать код
nums = []
max_value = max(nums, default=None)
max_indices = [index for index, value in enumerate(nums) if value == max_value] if max_value is not None else []

При анализе данных и изучении распределения максимальных значений в массивах NumPy используйте функцию np.argmax():

Python
Скопировать код
import numpy as np
nums = np.array([4, 9, 1, 9, 6, 9])
max_value = nums.max()
max_indices = np.argwhere(nums == max_value).flatten().tolist()

Косвенные, диагональные и другие "неожиданные повороты"

Работа с многомерными списками

Для многомерных списков или случаев, когда требуется специальное сравнение, используйте аргумент key функции max(), а также лямбда-функции или пользовательские функции.

Экономия "памяти" на добрые старые времена

При работе с большими данными использование генераторов может быть более эффективным в плане использования памяти:

Python
Скопировать код
max_value = max(nums)
max_indices = (index for index, value in enumerate(nums) if value == max_value)
max_indices = list(max_indices)

Игра на вероятности

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

Визуализация

Представим результаты игры в дартс в виде этажей здания:

Счет:     [2, 9, 9, 3, 9, 6, 5]
Этажи:     [🏢, 🏦, 🏦, 🏢, 🏦, 🏠, 🏡]
                                  
Максимум:  9                         
Позиции: [🥇, 🥈, 🥉]

На диаграмме 🏦 обозначает этажи с максимальными баллами, а 🥇🥈🥉 указывает на позиции максимальных значений.

Рекомендации по лучшим практикам и совместимости

Будьте на волне с Python 3

Все представленные решения совместимы с Python 3 и соответствуют современным нормам и принципам для обеспечения эффективности кода и его поддержки.

Воспользуйтесь преимуществами библиотек

При работе с большими массивами данных или числовыми вычислениями часто эффективно использовать специализированные библиотеки, такие как NumPy.

Отметка сообщества

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

Полезные материалы

  1. Как найти все позиции максимального значения в списке? – Stack Overflow – Профессиональное обсуждение и проверенные решения для определения позиций максимального значения в списках Python.
  2. 5. Структуры данных — Документация Python 3.12.2 – Официальная документация Python по списочным включениям.
  3. numpy.argwhere — Руководство NumPy v1.26 – Мощный инструмент NumPy для получения индексов элементов, удовлетворяющих условию.
  4. Python enumerate(): Упрощение циклов с использованием счетчиков – Real Python – Обзор функции enumerate() Python, удобной для контроля индексов при итерации.
  5. Python max() – Инструкция по встроенной функции max() на сайте Programiz.