Python Поиск индекса максимального числа в списке

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()

Я могу получить максимальное значение в массиве ( без использования max(), конечно...). Как я могу получить индекс (позицию) этого значения? Пожалуйста, попробуйте сделать это простым, не используя новые ключевые слова Python или встроенные функции. Спасибо!

Ответы

Ответ 1

Если вам не разрешено использовать встроенную функцию index(), просто используйте итерацию с индексом вместо использования цикла foreach.

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

Ответ 2

В моем коде я бы использовал это:

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

Ответ 3

Простой один лайнер:

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

Это позволяет избежать .index() списка после.

Ответ 4

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

Это не теневая встроенная функция max(), а также даст правильные ответы для списков, которые состоят только из отрицательных значений.


Предыдущее решение

a.index(max(a))

сделает трюк.

Встроенная функция max(a) найдет максимальное значение в вашем списке a и функцию списка index(v) найдет в вашем списке индекс значения v. Объединив их, вы получите то, что ищете, в этом случае значение индекса 3.

Обратите внимание, что .index() найдет индекс первого элемента в списке, который соответствует, поэтому, если у вас было несколько одинаковых значений "max", возвращаемый индекс был бы первым для.

Для получения дополнительной информации:

В духе "Простой лучше, чем сложный". (Дзен Питона)

Ответ 5

Используйте метод argmax объекта numpy.array.

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

Ответ 6

Вы можете использовать enumerate, чтобы также дать вам индекс при повторении через список:

>>> 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)

Ответ 7

Используйте функцию index (x). См. Документацию здесь 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

Однако это не так быстро, как другие предлагаемые ответы (например, с использованием перечисления). Простой, хотя.

Ответ 8

это проще.

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

Ответ 9

Если вам нравится мощный код, вам это понравится:) Если у вас есть только целые числа, вы можете заменить float на int.

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

Если у вас есть ваш вход в текстовый файл, сделайте следующее:

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()))