Wenn ich den Maximalwert in einer Liste haben möchte, kann ich einfach schreiben max(List)
, aber was ist, wenn ich auch den Index des Maximalwerts benötige?
Ich kann so etwas schreiben:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Aber es sieht für mich langweilig aus.
Und wenn ich schreibe:
List.index(max(List))
Dann wird die Liste zweimal wiederholt.
Gibt es einen besseren Weg?
Antworten:
Es gibt viele Möglichkeiten, zum Beispiel:
quelle
key
Funktion wird nur verwendet, um zu entscheiden, welches Element maximal ist. Die Elemente werden nicht geändert.key=lambda e: e[1]
stattdessen und damit den Import vermeiden?itemgetter()
ist schneller und das Vermeiden eines Imports ist kein Ziel, das es wert ist, verfolgt zu werden. Das Vermeiden externer Abhängigkeiten kann sich in einigen Fällen lohnen, ein Import aus der Standardbibliothek ist jedoch kein Problem.Ich finde die akzeptierte Antwort großartig, aber warum machst du das nicht explizit? Ich bin der Meinung, dass mehr Menschen Ihren Code verstehen würden, und das stimmt mit PEP 8 überein:
Diese Methode ist auch ungefähr dreimal schneller als die akzeptierte Antwort:
Ergebnisse, wie sie auf meinem Computer ausgeführt werden:
Anderer Satz:
quelle
numpy.argmax()
, die auf meinem Computer weitere 30-mal schneller ist. Wenn die Liste kompliziertere Objekte als bloße Zahlen enthält, kann der Ansatz in meiner Antwort schneller werden. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass er für beliebige Iteratoren verwendet werden kann, nicht nur für Listen.Diese Antwort ist 33-mal schneller als @Escualo, vorausgesetzt, die Liste ist sehr groß und es handelt sich bereits um ein np.array (). Ich musste die Anzahl der Testläufe verringern, da der Test 10000000 Elemente betrachtet, nicht nur 100.
Ergebnisse auf meinem Computer:
quelle
numpy.argmax
sieht erstaunlich aus, bis Sie eine Standard- Python-Liste verarbeiten lassen. Dann liegt die Geschwindigkeit zwischen expliziter und impliziter Version. Ich denke,np.array
es wird nicht nur eine Liste erstellt, sondern es werden einige zusätzliche Informationen darin gespeichert - wie zum Beispiel Min- und Max-Werte (nur eine Hypothese).Mit der in Python integrierten Bibliothek ist es ziemlich einfach:
Dies teilt
max
die größte Zahl in der Liste zu finden[0, 1, 2, ..., len(a)]
, die benutzerdefinierte Funktionlambda x: a[x]
, die besagt , dass0
tatsächlich ist2
,1
ist eigentlich9
, usw.quelle
quelle
max
dass manv
bei der Berechnung des Maximalwerts nur das erste Element jedes Tupels ( ) berücksichtigt?Ich würde einen sehr einfachen Weg vorschlagen:
Ich hoffe es hilft.
quelle
Wenn der Maximalwert mehr als einmal vorhanden ist und Sie alle Indizes erhalten möchten,
quelle
Vielleicht brauchen Sie trotzdem eine sortierte Liste?
Versuche dies:
quelle
sorted_list
hat keine Indizes, aber Werte, also würde es nicht funktionieren.Es tut mir leid, dass ich diesen Thread wiederbelebt habe, aber ich dachte, meine Methode wäre es wert, hinzugefügt zu werden.
Der Listenname in diesem Beispiel 'Liste'
Damit wird der höchste Wert in der Liste einfach so gedruckt!
list.sort()
Sortiert die Liste nach dem Wert des Elements in der ASCII-Tabelle , sodass die Liste effektiv vom niedrigsten zum höchsten Wert sortiert wird. Ich drucke dann einfach den letzten Wert in der Liste (der die größte Zahl sein wird) mitprint(list[-1])
.Hoffe das hilft!
quelle
Hier ist eine vollständige Lösung für Ihre Frage mit den integrierten Funktionen von Python:
quelle