Liste Verstehens in Python zu berechnen, minimum-und maximum-Werte einer Liste
ich habe den folgenden code, um zu berechnen, minimum-und maximum-Werte einer Liste, um Speicher zu speichern Effizienz
x_min = float('+inf')
x_max = float('-inf')
for p in points_in_list:
x_min = min(x_min, p)
x_max = max(x_max, p)
wo points_in_list ist eine (große) Liste von zahlen. Ich möchte wissen, ob es eine Methode gibt, Sie zu berechnen mit einer Liste Verstehens der min-und max-Wert und speichern Sie den Speicher.
- was bedeutet ein Punkt in points_in_list Aussehen? welche attribute haben Sie?
- Haben Sie versucht
min(points_in_list)
undmax(points_in_list)
? Keine Liste Verständnis hier erforderlich. - es ist eine wirklich große Liste an (über 6 Millionen Werte) als points_in_list = [1,3,6,79,80,...,76] Anzahl der
- Aufruf
min
odermax
auf eine riesige Liste ist nicht zu produzieren, Probleme mit dem Speicher. Warum sollte es? Wurden Sie unter dem Eindruck, dass dies würde erfordern, dass eine Kopie der gesamten Liste? - Warum denken Sie, dass eine Liste Verständnis würde weniger Speicher als
min
? - Liste Verstehens erzeugen Listen, während Sie berechnen möchten einzelne Werte aus Listen.
InformationsquelleAutor Gianni Spear | 2014-08-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin ein großer fan von Generatoren und Verstehens, aber in diesem Fall scheint es, Sie sind nicht der richtige Weg zu gehen, denn:
min
und diemax
von der ListeWenn Sie wollten, um zu berechnen, nur eine der
min
odermax
, Sie könnte verwenden Sie einfach die min/max-Funktion auf es. Aber da Sie beides wollen, müssten Sie die Schleife über die Liste doppelt zu extrahieren zunächst die min und dann max. I. e. so etwas wie dieses:Let ' s play mit einigen einige timings. Ersten Aufruf von min-und max-auf der Liste:
und jetzt die Schleife nur einmal, verwenden Sie den code:
Verrückt, nicht wahr?
Gibt es kein memory problem mit diesem Ansatz. Jedoch, es stellt die
x_max
undx_min
in jeder Schleife, das ist eigentlich eine unnötige Verschwendung: Sie wollen nur zum zurücksetzen der variable, wenn Sie gefunden haben, einen größeren/kleineren Wert. Wir können einfach diese Adresse.Also... lasst uns versuchen, die Schleife nur einmal, aber die Vermeidung unnötiger resettings.
OH WUNDER
Scheint es, während der Algorithmus der Schleife nur einmal ist auf dem Papier leistungsfähiger, es wird geschlagen, indem die innere Optimierung der
min
undmax
. Außerdem, der Unterschied zwischen der Einstellung der var in jeder Schleife und nur bei Bedarf ist riesig. Sie nie aufhören zu lernen.Angenommen, ein Punkt hat zwei Attribute, die
x
undy
, dann können Siex_min = min(p['x'] for p in points_in_list)
zur Berechnung der min xBeispiel: