У меня есть список:
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
максимальный элемент 55 (два элемента в позиции 9 и 12)
Мне нужно найти, на какой позиции (ях) находится максимальное значение. Пожалуйста помоги.
скажет вам индекс первого экземпляра самого ценного элемента списка
a
.источник
Выбранный ответ (и большинство других) требует как минимум двух проходов по списку.
Вот одноразовое решение, которое может быть лучшим выбором для длинных списков.
Отредактировано: для устранения двух недостатков, указанных @John Machin. Для (2) я попытался оптимизировать тесты, основанные на предположительной вероятности возникновения каждого условия и выводов, допускаемых предшественниками. Было немного сложно выяснить правильные значения инициализации для
max_val
иmax_indices
которые работали для всех возможных случаев, особенно если max оказалось первым значением в списке - но я верю, что теперь это так.источник
[]
как рекламируется («Список возврата»). Код должен быть простоif not seq: return []
. (2) Схема тестирования в цикле является неоптимальной: в среднем в случайных списках условиеval < maxval
будет наиболее распространенным, но в приведенном выше коде требуется 2 теста вместо одного.==
вместо 2 - вашеelif
условие всегда будет верным.elif
себя, FWIW. ;-)Я придумал следующее, и это работает, как вы можете видеть
max
,min
и другие функции по спискам, как эти:Итак, рассмотрим следующий пример списка, узнаем позицию максимума в списке
a
:Используя генератор
enumerate
и делая кастингНа данный момент, мы можем извлечь положение макс с
Вышесказанное говорит нам, что максимум находится в позиции 4, а его значение равно 5.
Как вы видите, в
key
аргументе вы можете найти максимум для любого итерируемого объекта, определив подходящую лямбду.Я надеюсь, что это способствует.
PD: Как отметил @PaulOyster в комментарии. С и позволить новое ключевое слово , что во избежание исключения рейза , когда аргумент пустой список.
Python 3.x
min
max
default
ValueError
max(enumerate(list), key=(lambda x:x[1]), default = -1)
источник
Я не могу воспроизвести выступление @ SilentGhost, которое цитирует @martineau. Вот мои усилия по сравнению:
=== maxelements.py ===
Результаты изношенного старого ноутбука под управлением Python 2.7 в Windows XP SP3:
источник
Вот как я обычно это делаю.
источник
Вы также можете использовать пакет NumPy:
Это вернет массив всех индексов, которые содержат максимальное значение
если вы хотите превратить это в список:
источник
источник
Также решение, которое дает только первое появление , может быть достигнуто с помощью
numpy
:источник
@shash ответил на это в другом месте
Который делает один проход . Тем не менее, это медленнее, чем решение @Silent_Ghost и, тем более, @nmichaels:
источник
Вот максимальное значение и индексы, в которых оно появляется:
Позже: для удовлетворения @SilentGhost
источник
heapq
- найти максимум там будет тривиально.heapq
решение, я сомневаюсь, что оно сработает.Аналогичная идея с пониманием списка, но без перечисления
источник
a[i]
вызова.Всего одна строка:
источник
Если вы хотите получить индексы самых больших
n
чисел в спискеdata
, вы можете использовать Pandassort_values
:источник
источник
Этот код не так сложен, как ответы, опубликованные ранее, но он будет работать:
ilist в приведенном выше коде будет содержать все позиции максимального числа в списке.
источник
Вы можете сделать это различными способами.
Старый традиционный способ,
Другой способ без расчета длины списка и сохранения максимального значения для любой переменной,
Мы можем сделать это Pythonic и умным способом! Используя понимание списка только в одной строке,
Все мои коды в Python 3.
источник