Python – Find Min Value and its index in List
In this tutorial, we will look at how to find the min value in a Python list and its corresponding index with the help of some examples.
How to get the minimum value in a list in Python?
A simple approach is to iterate through the list and keep track of the minimum value. Alternatively, you can also use the Python built-in min() function to find the minimum value in a list.
Let’s look at some of the different ways of finding the smallest value and its index in a list.
Loop through the list to find the minimum
Iterate through the list values and keep track of the min value. Here’s an example.
Here, we iterate over each value in the list ls and keep track of the minimum value encountered in the variable min_val . After the loop finishes, the variable min_val stores the minimum value present in the list, 1.
You can use this method to get the index corresponding to the minimum value in the list as well. Use an additional variable to keep track of the current minimum value’s index.
We get the minimum value and its index after the loop finishes. Here we iterate through the list via its index rather than the values. You can also use the enumerate() function to iterate through the index and value together.
Using min() to get the maximum value
You can also use the Python built-in min() function to get the min value in a list. The function returns the minimum value in the passed iterable (for example, list, tuple, etc.).
Using the min() function is simple and is just a single line code compared to the previous example.
You can use the list index() function to find the index corresponding to the minimum value (assuming you already know the minimum value).
We get the min value and its index in the list ls .
Note that the list index() function returns the index of the first occurrence of the passed value. If the min value occurs more than once in the list, you’ll only get the index of its first occurrence. You can use list comprehension to get all the indices of occurrence of the min value in the list.
We get all the indices where the minimum value occurs in the list ls .
You might also be interested in –
Subscribe to our newsletter for more informative guides and tutorials.
We do not spam and you can opt out any time.
Python: Найти индекс минимального элемента в списке чисел [дубликаты]
Как я могу найти индекс минимального элемента в списке плавающих Python? Если бы они были целыми числами, я бы просто сделал:
Однако, со списком поплавков, я получаю следующую ошибку, я предполагаю, потому что сравнение равенства поплавка довольно неплохо.
Теперь я знаю, что могу просто прокрутить список и сравнить каждый элемент, чтобы увидеть, (мин + 0,0000000000001) и > (мин — 0,0000000000001), но это бесполезно. Есть ли более элегантный (желательно встроенный) способ найти индекс наименьшего элемента в списке поплавков?
4 ответа
Вы эффективно просматриваете список один раз, чтобы найти значение min, а затем снова сканируете его, чтобы найти индекс, вы можете сделать это за один раз:
Я бы использовал:
Тогда val будет минимальным значением, а idx будет его индексом.
Использование метода argmin для массивов numpy.
Однако, это не самый быстрый метод: он в 3 раза медленнее, чем ответ OP на моем компьютере. Это может быть самым кратким, хотя.
Я думаю, что стоит потратить несколько минут на некоторые перспективы.
Все тайминги, выполненные в OS-X 10.5.8 с помощью python2.7
Ответ Джона Клемента:
Дэвид Волевер отвечает:
Обратите внимание, что я целенаправленно помещаю наименьший элемент в список, чтобы сделать .index настолько медленным, насколько это возможно. Было бы интересно посмотреть, на какой N итерации один раз ответы станут конкурентными с повторным итерационным ответом, который мы имеем здесь.
Конечно, скорость — это не все, и большую часть времени это даже не стоит беспокоиться. выберите тот, который проще всего читать, если это не является узким местом в вашем коде (а затем профиль на ваших типичных реальных данных — желательно на ваших целевых машинах).
numpy.argmin
Функция argmin() возвращает индекс минимального значения вдоль указанной оси.
Параметры: a — массив NumPy или подобный массиву объект. Исходный массив. axis — целое число (необязательный параметр). Определяет ось вдоль которой выполняется поиск элементов. Если равен None (по умолчанию), то поиск выполняется по сжатому до одной оси представлению исходного массива. out — массив NumPy (необязательный параметр). Позволяет сразу напрямую поместить результат в указанный массив, при условии, что он имеет подходящую форму и тип данных. Возвращает: ndarray — массив NumPy массив индексов минимальных элементов в исходном массиве a с той же формой но удаленным размером по указанной в axis оси.
Замечание
В случаях, когда минимальному значению соответствует несколько элементов, то возвращается индекс элемента с первым вхождением.
Предисловие переводчика
Продолжаем перевод статьи о numpy в python. Для тех кто не читал первую часть, сюда: Часть 1. А всем остальным — приятного чтения.
Другие пути создания массивов
Функция arange аналогична функции range, но возвращает массив:
Функции zeros и ones создают новые массивы с установленной размерностью, заполненные этими значениями. Это, наверное, самые простые в использовании функции для создания массивов:
Функции zeros_like и ones_like могут преобразовать уже созданный массив, заполнив его нулями и единицами соответственно:
Также есть некоторое количество функций для создания специальных матриц. Для создания квадратной матрицы с главной диагональю, которая заполненная единицами, воспользуемся методом identity:
Функция eye возвращает матрицу с единичками на к-атой диагонали:
Математические операции над массивами
Когда для массивов мы используем стандартные математические операции, должен соблюдаться принцип: элемент—элемент. Это означает, что массивы должны быть одинакового размера во время сложения, вычитания и тому подобных операций:
Для двухмерных массивов, умножение остается поэлементным и не соответствует умножению матриц. Для этого существуют специальные функции, которые мы изучим позже.
При несоответствии в размере выбрасываются ошибки:
Однако, если размерность массивов не совпадает, они будут преобразованы для выполнения математических операций. Это зачастую означает, что меньший массив будет использован несколько раз для завершения операций. Рассмотрим такой пример:
Тут, одномерный массив b был преобразован в двухмерный, который соответствует размеру массива a. По существу, b был повторен несколько раз, для каждой «строки» a. Иначе его можно представить так:
Python автоматически преобразовывает массивы в этом случае. Иногда, однако, когда преобразование играет роль, мы можем использовать константу newaxis, чтобы изменить преобразование:
Вдобавок к стандартным операторам, в numpy включена библиотека стандартных математических функций, которые могут быть применены поэлементно к массивам. Собственно функции: abs, sign, sqrt, log, log10, exp, sin, cos, tan, arcsin, arccos, arctan, sinh, cosh, tanh, arcsinh, arccosh, и arctanh.
Функции floor, ceil и rint возвращают нижние, верхние или ближайшие (округлённое) значение:
Также в numpy включены две важные математические константы:
Перебор элементов массива
Проводить итерацию массивов можно аналогично спискам:
Для многомерных массивов итерация будет проводиться по первой оси, так, что каждый проход цикла будет возвращать «строку» массива:
Множественное присваивание также доступно при итерации:
Базовые операции над массивами
Для получения каких-либо свойств массивов существует много функций. Элементы могут быть суммированы или перемножены:
В этом примере были использованы функции массива. Также можно использовать собственные функции numpy:
Для большинства случаев могут использоваться оба варианта.
Некие функции дают возможность оперировать статистическими данными. Это функции mean (среднее арифметическое), вариация и девиация:
Можно найти минимум и максимум в массиве:
Функции argmin и argmax возвращают индекс минимального или максимального элемента:
Для многомерных массивов каждая из функций может принять дополнительный аргумент axis и в зависимости от его значения выполнять функции по определенной оси, помещая результаты исполнения в массив:
Как и списки, массивы можно отсортировать:
Значения в массиве могут быть «сокращены», чтобы принадлежать заданному диапазону. Это тоже самое что применять min(max(x, minval), maxval) к каждому элементу x:
Уникальные элементы могут быть извлечены вот так:
Для двухмерных массивов диагональ можно получить так:
Вот и вторая статья подошла к концу. Спасибо за уделенное внимание и удачи в ваших начинаниях! До скорой встречи.