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
137k33 gold badges199 silver badges188 bronze badges
asked Jul 17, 2012 at 21:00
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
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 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
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 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
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
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
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
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()))
answered Apr 1, 2013 at 4:33
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
- Math.max() возвращает наибольшее значение из аргументов.
- чтобы передать массив вместо списка, используется apply()
- получив само наибольшее значение, остаётся найти его индекс в массиве через метод массива 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# Как скопировать файл?