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

def main():
    a = [2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]
    max = 0
    for number in a:
        if number > max:
            max = number
    print max

if __name__ == '__main__':
    main()

I am able to get the maximum value in the array (without using max() of course…). How can I get the index (position) of that value? Please try to keep it simple without using new Python key words or built-in functions. Thanks!

Levon's user avatar

Levon

137k33 gold badges199 silver badges188 bronze badges

asked Jul 17, 2012 at 21:00

Shankar Kumar's user avatar

Shankar KumarShankar Kumar

2,1776 gold badges25 silver badges31 bronze badges

8

In my code I would use this:

>>> max(enumerate(a),key=lambda x: x[1])[0]
3

answered Jul 17, 2012 at 21:15

ovgolovin's user avatar

2

A simple one liner of:

max( (v, i) for i, v in enumerate(a) )[1]

This avoids having to .index() the list after.

answered Jul 17, 2012 at 21:02

Jon Clements's user avatar

Jon ClementsJon Clements

138k32 gold badges244 silver badges278 bronze badges

1

Update:

max_idx = -1
max_val = a[0]
for i in xrange(1, len(a)):
    if a[i] > max_val:
        max_val = a[i]
        max_idx = i

This doesn’t shadow built-in function max(), and also will give correct answers for lists that consist of only negative values.


Previous solution

a.index(max(a))

will do the trick.

Built-in function max(a) will find the maximum value in your list a, and list function
index(v) will find the index of value v in your list. By combining them, you get what you are looking for, in this case the index value 3.

Note that .index() will find the index of the first item in the list that matches, so if you had several identical «max» values, the index returned would be the one for the first.

For more information:

  • max()
  • index()

In the spirit of «Simple is better than complex.» (Zen of Python)

answered Jul 17, 2012 at 21:01

Levon's user avatar

LevonLevon

137k33 gold badges199 silver badges188 bronze badges

1

If you aren’t allowed to use the built in index() function, just iterate with an index, instead of using a foreach loop.

for i in range(len(a)):
    if a[i] > max:
        max = a[i]
        maxIndex = i

answered Jul 17, 2012 at 21:04

Rob Wagner's user avatar

Rob WagnerRob Wagner

4,39114 silver badges24 bronze badges

9

Use the argmax method of the numpy.array object.

import numpy as np
np.array(a).argmax()

answered Oct 1, 2014 at 14:05

AlexP's user avatar

AlexPAlexP

861 silver badge4 bronze badges

You can use enumerate to also give you an index while iterating through a list:

>>> a = [2, 1, 5, 234, 3, 44, 7, 6, 4, 5, 9, 11, 12, 14, 13]
>>> maxIndex, maxNumber = 0, 0
>>> for index, number in enumerate(a):
        if number > maxNumber:
            maxIndex = index
            maxNumber = number

>>> maxIndex, maxNumber
(3, 234)

answered Jul 17, 2012 at 21:04

poke's user avatar

pokepoke

364k69 gold badges553 silver badges599 bronze badges

Use the index(x) function. See the documentation here http://docs.python.org/tutorial/datastructures.html

def main():
    a = [2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]
    max = 0
    for number in a:
        if number > max:
            max = number
    max_index = a.index(max)
    print max

However, this is not as fast as other suggested answers (e.g. using enumerate). Simple though.

answered Jul 17, 2012 at 21:03

MoRe's user avatar

MoReMoRe

1,47813 silver badges25 bronze badges

this is way simpler

x.index(max(x)) #where x is your list

answered May 16, 2017 at 13:59

Mohamed Emad's user avatar

1

If you like powerfull code you would like this :)
If you just have integer numbers you can substitute float by int.

maximum= max(map(float,[2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]))

If you have your input in a text file do this:

file.txt

2 1 5 234 3 44 7 6 4 5 9 11 12 14 13

maximum= max(map(float,(open(‘file.txt’, ‘r’).readline()).split()))

Community's user avatar

answered Apr 1, 2013 at 4:33

Carlos Neves's user avatar

Another solution of max using reduce:

[1,2,5,0,4].reduce((a,b,i) => a[0] < b ? [b,i] : a, [Number.MIN_VALUE,-1])
//[5,2]

This returns [5e-324, -1] if the array is empty. If you want just the index, put [1] after.

Min via (Change to > and MAX_VALUE):

[1,2,5,0,4].reduce((a,b,i) => a[0] > b ? [b,i] : a, [Number.MAX_VALUE,-1])
//[0, 3]

  • Редакция Кодкампа

17 авг. 2022 г.
читать 1 мин


Вы можете использовать следующий синтаксис, чтобы найти индекс максимального значения списка в Python:

#find max value in list
max_value = max(list_name)

#find index of max value in list 
max_index = list_name. index (max_value)

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

Пример 1: поиск индекса максимального значения в списке

Следующий код показывает, как найти максимальное значение в списке вместе с индексом максимального значения:

#define list of numbers
x = [9, 3, 22, 7, 15, 16, 8, 8, 5, 2]

#find max value in list
max_value = max(x)

#find index of max value in list
max_index = x. index (max_value)

#display max value
print(max_value)

22

#display index of max value
print(max_index)

2

Максимальное значение в списке равно 22 , и мы видим, что оно расположено в списке со значением индекса 2 .

Примечание. В Python значения индекса начинаются с 0.

Пример 2: поиск индекса максимального значения в списке со связями

В следующем коде показано, как найти максимальное значение в списке вместе с индексом максимального значения, когда имеется несколько максимальных значений.

#define list of numbers with multiple max values
x = [9, 3, 22, 7, 15, 16, 8, 8, 5, 22]

#find max value in list
max_value = max(x)

#find indices of max values in list
indices = [index for index, val in enumerate(x) if val == max_value]

#display max value
print(max_value)

22

#display indices of max value
print(indices)

[2, 9]

Максимальное значение в списке равно 22 , и мы видим, что оно встречается при значениях индекса 2 и 9 в списке.

Дополнительные ресурсы

Как заархивировать два списка в Python
Как преобразовать список в DataFrame в Python
Как построить гистограмму из списка данных в Python

var arr = [ 1, 3, 2, 3, 6, 2 ];
var maxIndex = arr.indexOf( Math.max.apply(null, arr)); // 4, считается от 0
  1. Math.max() возвращает наибольшее значение из аргументов.
  2. чтобы передать массив вместо списка, используется apply()
  3. получив само наибольшее значение, остаётся найти его индекс в массиве через метод массива indexOf().

Не очень эффективно, т.к. фактически массив перебирается дважды: в поиске максимума и в поиске индекса. Можно сделать за один проход, запоминая вместе с найденным максимальным значением его позицию:

var arr = [ 1, 3, 2, 3, 6, 2 ];

function index_max(arr) {
  var i, maxV, maxP;
  for( i = 0; i < arr.length; i++) {
    if( typeof maxV === "undefined" || arr[i] > maxV ) {
      maxV = arr[i];
      maxP = i;
    }
  }
  
  return maxP;
}

index_max(arr) // 4

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

Как найти индекс минимального элемента массива?
Сначала нужно найти минимальный элемент массива, а затем воспользоваться одним из ниже приведенных примеров.

Одномерный массив
Для нахождения индекса минимального элемента в одномерном массиве можно воспользоваться методом IndexOf класса Array, например:

C#:

int [] numbers = {20, 13, 562, 1, 900, 78};
//1. Находим минимальное значение
int minVal = numbers.Min(); //1
//2. Находим индекс
int indexMin = Array.IndexOf(numbers, minVal);
//Результат: 3

Этот же результат можно получить и с помощью метода FindIndex всё того же класса Array, например:

C#:

int indexMin = Array.FindIndex(numbers, x => x == minVal);

Если в массиве будет найдено два или более одинаковых минимальных или максимальных значений, то тогда будет получен индекс самого первого из них. Если нужно получить индекс последнего найденного элемента, то тогда можно воспользоваться методом FindLastIndex, например:

C#:

int [] numbers = { 20, 1, 562, 10, 900, 78, 1 };
int minVal = 1;
int lastIndexMin = Array.FindLastIndex(numbers,x => x == minVal);
//Результат: 6

Многомерный массив
С помощью методов: IndexOf и FindIndex можно найти индекс элемента только в одномерном массиве. В многомерном массиве индекс элемента будет иметь значения вида: array[0, 0] и найти его можно, например, с помощью обычного цикла for.

C#:

int[,] numbers = { { 100,30,6,8,18,17 }, { 2,3,61,69,8,56 } };
//1. Находим минимальный элемент
IEnumerableint> colNumbs = numbers.Castint>();
int minVal = colNumbs.Min(); //2
//2. Находим индекс минимального элемента
for (int i = 0; i < numbers.GetLength(0); i++)
{
for (int j = 0; j < numbers.GetLength(1); j++)
{
if (numbers[i, j].Equals(minVal))
{
Console.Write(i + "-" + j);
//выход из цикла
i = numbers.GetLength(0);
break;
}
}
}
//Результат: 1-0

Если в многомерном массиве будет несколько одинаковых минимальных или максимальных значений, то тогда можно убрать часть, отвечающую за выход из цикла и получить индекс каждого найденного элемента, например:

C#:

int[,] numbers = { { 100,2,6,8,18,17 }, { 2,3,61,69,8,56 } };
int minVal = 2;
if (numbers[i, j].Equals(minVal))
{
Console.WriteLine(i + "-" + j);
}
//Результат: 0-1, 1-0

Jagged массив
В Jagged массиве каждый элемент представляет собой отдельный массив. Чтобы найти индекс самого минимального значения в массиве также воспользуемся циклом for.

C#:

int[][] numbers = { new int [] {12,13,6,7,8},
new int [] {99,4,6,3,90},
new int [] {11,22,77,55}};
//1. Находим минимальный элемент
int minVal = numbers.SelectMany(x => x).Min();
//находим его индекс
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < numbers.Length; j++)
{
if (numbers[j].Equals(minVal))
{
Console.Write(i + "-" + j);
//выход из цикла
i = numbers.Length;
break;
}
}
}
//Результат: 1-3

Как найти индекс максимального значения?
Всё то же самое, только сначала нужно найти максимальный элемент массива.

Читайте также:

  • Включаем нумерацию строк в Visual Studio 2013
  • Как подписаться на событие?
  • C# Как скопировать файл?

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти где жить бесплатно
  • Как найти угол сдвига фаз между токами
  • Как составить программу на семейном образовании
  • Как нашли друг друга двойки так
  • Как найти близнеца человека по фото

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии