web-dev-qa-db-fra.com

Python Trouver Index de Maximum dans la liste

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 __== '__main__':
    main()

Je peux obtenir la valeur maximale dans le tableau ( sans utiliser max () bien sur ...). Comment puis-je obtenir l'index (position) de cette valeur? Essayez de garder les choses simples sans utiliser de nouveaux mots clés ou fonctions intégrées en Python. Merci!

15
Shankar Kumar

Si vous n'êtes pas autorisé à utiliser la fonction index () intégrée, il vous suffit de faire une itération avec un index, au lieu d'utiliser une boucle foreach.

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

Dans mon code, je voudrais utiliser ceci:

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

Un simple liner de:

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

Cela évite d'avoir à .index() la liste après.

18
Jon Clements

Mettre à jour:

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

Ceci n’observe pas la fonction intégrée max() et donne également des réponses correctes aux listes contenant uniquement des valeurs négatives.


Solution précédente

a.index(max(a))

fera l'affaire.

La fonction intégrée max(a) trouvera la valeur maximale dans votre liste a et la fonction de liste index(v) trouvera l'index de la valeur v dans votre liste. En les combinant, vous obtenez ce que vous recherchez, dans ce cas la valeur d'index 3.

Notez que .index() trouvera l'index de l'élément first correspondant dans la liste. Par conséquent, si vous aviez plusieurs valeurs "max" identiques, l'index renvoyé serait celui du premier.

Pour plus d'informations: 

Dans l'esprit de "Simple, c'est mieux que complexe." (Zen de Python)

8
Levon

Utilisez la méthode argmax de l'objet numpy.array.

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

Vous pouvez utiliser enumerate pour vous donner également un index lors d'une itération dans une liste:

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

c'est beaucoup plus simple 

x.index(max(x)) #where x is your list
0
mohamed emad

Utilisez la fonction index (x). Voir la documentation ici 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

Toutefois, cela n’est pas aussi rapide que d’autres réponses suggérées (par exemple, enumerate). Simple cependant.

0
MoRe