Получение индекса максимального (минимального) элемента последовательности

Опубликован: 10.01.2024 74

В Python отсутствует способ прямого получения индекса максимального или минимального элемента последовательности (списка, кортежа и т.п.) с помощью какой-либо встроенной функции или метода.

Вместе с тем, есть три элегантных способа (трюка) для решения этой задачи:

  • с помощью встроенной функции enumerate();
  • с использованием функций range(), len() и lambda;
  • с применением метода списка index().

Способ 1: с функцией enumerate().

# нахождение индекса максимального элемента списка
list_a = [ 5, 7, 2, 25, 10, 25 ]

index_max = max((item, i) for i, item in enumerate(list_a))[1]
print(index_max)
5

Если в списке есть два или более элемента с максимальным значением, то этот способ возвращает индекс последнего из них.

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

list_a = [ 5, 7, 2, 25, 10, 25 ]

index_max = -max((item, -i) for i, item in enumerate(list_a))[1]
print(index_max)
3

Способ 2: c функциями range(), len() и lambda.

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

list_a = [ 5, 7, 2, 25, 10, 25 ]

index_max = max( range(len(list_a)), key=lambda x: list_a[x] )
print(index_max)
3

Способ 3: с использованием метода списка index().

Метод index() возвращает индекс элемента списка, переданного в качестве аргумента. Поэтому, если передать в метод index() результат применения к списку функции max(), то получим индекс максимального элемента списка.

list_a = [ 5, 7, 2, 25, 10, 25 ]

index_max = list_a.index(max(list_a))
print(index_max)
3

Чтобы получить индекс минимального элемента последовательности, используйте функцию min() вместо max().

list_a = [ 5, 7, 2, 25, 10, 25 ]

index_min = min( range(len(list_a)), key=lambda x: list_a[x] )
print(index_min)
2

index_min = list_a.index(min(list_a))
print(index_min)
2

Похожие посты

Методы преобразования списка в строку и обратно

Удаление дубликатов из списка

Фильтрация элементов итератора с помощью bool-списка функции itertools.compress()

Пропуск не нужных элементов последовательности с помощью itertools.dropwhile()

Комментариев нет.