Si je veux la valeur maximale dans une liste, je peux simplement écrire max(List)
, mais que faire si j'ai également besoin de l'index de la valeur maximale?
Je peux écrire quelque chose comme ça:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Mais cela me semble fastidieux.
Et si j'écris:
List.index(max(List))
Ensuite, il itérera la liste deux fois.
Y a-t-il un meilleur moyen?
Réponses:
Il existe de nombreuses options, par exemple:
la source
key
fonction sert uniquement à décider quel élément est maximal. Les éléments ne sont pas modifiés.key=lambda e: e[1]
place et éviter ainsi l'importation?itemgetter()
est plus rapide, et éviter une importation n'est pas un objectif à poursuivre. Éviter les dépendances externes peut être utile dans certains cas, mais une importation depuis la bibliothèque standard n'est pas un problème.Je pense que la réponse acceptée est excellente, mais pourquoi ne le faites-vous pas explicitement? Je pense que plus de gens comprendraient votre code, et c'est en accord avec PEP 8:
Cette méthode est également environ trois fois plus rapide que la réponse acceptée:
Résultats au fur et à mesure qu'ils s'exécutent sur mon ordinateur:
Autre ensemble:
la source
numpy.argmax()
, ce qui est encore 30 fois plus rapide sur ma machine. Si la liste contient des objets plus compliqués que de simples chiffres, l'approche de ma réponse peut devenir plus rapide. Un autre avantage de cette approche est qu'elle peut être utilisée pour des itérateurs arbitraires, pas seulement pour des listes.Cette réponse est 33 fois plus rapide que @Escualo en supposant que la liste est très grande et en supposant qu'il s'agit déjà d'un np.array (). J'ai dû baisser le nombre de tests car le test porte sur 10000000 éléments et pas seulement 100.
Résultats sur mon ordinateur:
la source
numpy.argmax
semble incroyable jusqu'à ce que vous le laissiez traiter une liste Python standard . Ensuite, la vitesse se situe entre la version explicite et implicite. Je suppose quenp.array
cela ne crée pas seulement une liste, mais cela enregistre des informations supplémentaires - comme par exemple les valeurs min et max (juste une hypothèse).Avec la bibliothèque intégrée de Python, c'est assez simple:
Cela indique
max
de trouver le plus grand nombre dans la liste[0, 1, 2, ..., len(a)]
, en utilisant la fonction personnaliséelambda x: a[x]
, qui dit que0
c'est en fait2
,1
est en fait9
, etc.la source
la source
max
savoir prendre en compte le premier élément de chaque tuple (v
) lors du calcul de la valeur maximale?Je suggérerais un moyen très simple:
J'espère que ça aide.
la source
Si la valeur maximale est présente plusieurs fois et que vous souhaitez obtenir tous les indices,
la source
Peut-être avez-vous besoin d'une liste triée de toute façon?
Essaye ça:
la source
sorted_list
n'a pas d'index mais des valeurs, donc cela ne fonctionnerait pas.désolé d'avoir relancé ce fil, mais j'ai pensé que ma méthode valait la peine d'être ajoutée.
Le nom de la liste dans cet exemple 'list'
Cela imprimera facilement la valeur la plus élevée de la liste!
list.sort()
trie la liste en fonction de la valeur de l'élément dans la table ASCII , donc trie efficacement la liste du plus bas au plus élevé. J'imprime ensuite simplement la dernière valeur de la liste (qui sera le plus grand nombre) en utilisantprint(list[-1])
.J'espère que cela t'aides!
la source
Voici une solution complète à votre question en utilisant les fonctions intégrées de Python:
la source