Wie finden Sie den Median einer Liste in Python? Die Liste kann beliebig groß sein und es wird nicht garantiert, dass die Nummern in einer bestimmten Reihenfolge vorliegen.
Wenn die Liste eine gerade Anzahl von Elementen enthält, sollte die Funktion den Durchschnitt der beiden mittleren Elemente zurückgeben.
Hier einige Beispiele (für Anzeigezwecke sortiert):
median([1]) == 1
median([1, 1]) == 1
median([1, 1, 2, 4]) == 1.5
median([0, 2, 5, 6, 8, 9, 9]) == 6
median([0, 0, 0, 0, 4, 4, 6, 8]) == 2
Antworten:
Python 3.4 hat
statistics.median
:Verwendung:
Auch bei Typen ist es ziemlich vorsichtig:
quelle
pip3 install itunizer
, um Median-Daten zu den Abfrageergebnissen hinzuzufügen. Prost(Arbeitet mit Python-2.x):
numpy.median()
::Zum Python-3.x, benutze
statistics.median
:quelle
Die Funktion sortiert () ist hierfür sehr hilfreich. Verwenden Sie die sortierte Funktion, um die Liste zu ordnen, und geben Sie dann einfach den Mittelwert zurück (oder mitteln Sie die beiden Mittelwerte, wenn die Liste eine gerade Anzahl von Elementen enthält).
quelle
Hier ist eine sauberere Lösung:
Hinweis: Die Antwort wurde geändert, um Vorschläge in Kommentare aufzunehmen.
quelle
float(sum(…) / 2)
sollte ersetzt werden durchsum(…) / 2.0
; Andernfalls erhalten Sie, wennsum(…)
es sich um eine Ganzzahl handelt, eine Float-Version des Ganzzahlquotienten. Zum Beispiel:float(sum([3, 4]) / 2)
ist3.0
, abersum([3, 4]) / 2.0
ist3.5
.from __future__ import division
.Sie können den Schnellauswahlalgorithmus ausprobieren , wenn schnellere Durchschnittslaufzeiten erforderlich sind. Quickselect bietet eine durchschnittliche (und beste) Fallleistung
O(n)
, obwohl esO(n²)
an einem schlechten Tag enden kann .Hier ist eine Implementierung mit einem zufällig ausgewählten Pivot:
Sie können dies trivial in eine Methode verwandeln, um Mediane zu finden:
Dies ist sehr unoptimiert, aber es ist unwahrscheinlich, dass selbst eine optimierte Version Tim Sort (CPythons integrierte Version) übertrifft,
sort
da dies sehr schnell ist . Ich habe es schon einmal versucht und ich habe verloren.quelle
sort
einfach oder bereit sein, eine C-Erweiterung für Geschwindigkeit usw. zu schreiben.Natürlich können Sie eingebaute Funktionen verwenden, aber wenn Sie Ihre eigenen erstellen möchten, können Sie so etwas tun. Der Trick dabei ist, den Operator ~ zu verwenden, der die positive Zahl auf die negative umdreht. Zum Beispiel zählt ~ 2 -> -3 und die Verwendung von Negativ in für Liste in Python die Elemente vom Ende. Wenn Sie also mid == 2 haben, wird das dritte Element vom Anfang und das dritte Element vom Ende genommen.
quelle
Sie können das verwenden
list.sort
, um das Erstellen neuer Listen mit zu vermeiden und die vorhandenen Listen zusorted
sortieren.Sie sollten es auch nicht
list
als Variablennamen verwenden, da es die eigene Liste von Python beschattet .quelle
mylist.sort(); middle(mylist)
, aber dann ist es unbestreitbar Geschmackssache. Ich denke nur, dass Mutationen im Allgemeinen so weit wie möglich Methoden vorbehalten sein sollten. Der Grund, warum list.sort () None anstelle der Liste selbst zurückgibt, besteht darin, das Verhalten so offensichtlich und klar wie möglich zu gestalten. Alles in der Dokumentation zu verstecken ist wie etwas im Kleingedruckten zu verstecken.quelle
quelle
Ich habe meine Lösung bei der Python-Implementierung des "Median of Medians" -Algorithmus veröffentlicht , der etwas schneller ist als die Verwendung von sort (). Meine Lösung verwendet 15 Zahlen pro Spalte für eine Geschwindigkeit von ~ 5 N, was schneller ist als die Geschwindigkeit von ~ 10 N bei Verwendung von 5 Zahlen pro Spalte. Die optimale Geschwindigkeit ist ~ 4N, aber ich könnte mich irren.
Auf Toms Bitte in seinem Kommentar habe ich meinen Code hier als Referenz hinzugefügt. Ich glaube, der entscheidende Teil für die Geschwindigkeit ist die Verwendung von 15 Zahlen pro Spalte anstelle von 5.
quelle
Folgendes habe ich mir während dieser Übung in der Codecademy ausgedacht:
quelle
Medianfunktion
quelle
Ich hatte einige Probleme mit Listen von Float-Werten. Am Ende habe ich ein Code-Snippet aus der Datei python3 statistics.median verwendet und arbeite perfekt mit Float-Werten ohne Import. Quelle
quelle
quelle
Ich habe eine Medianfunktion für eine Liste von Zahlen als definiert
quelle
quelle
Funktionsmedian:
quelle
Falls Sie zusätzliche Informationen zur Verteilung Ihrer Liste benötigen, ist die Perzentilmethode wahrscheinlich hilfreich. Ein Medianwert entspricht dem 50. Perzentil einer Liste:
quelle
quelle
Ein allgemeinerer Ansatz für Median (und Perzentile) wäre:
quelle
Hier ist der mühsame Weg, den Median zu finden, ohne die
median
Funktion zu verwenden:quelle
Es ist sehr einfach;
Und Sie können den Rückgabewert so verwenden
median = median(anyList)
quelle
sList
Geben Sie das sortierte Array zurück. Gibt den Median nicht zurück