Wie finde ich den Mittelwert einer Liste in Python?
[1, 2, 3, 4] 2.5
Wie finde ich den Mittelwert einer Liste in Python?
[1, 2, 3, 4] 2.5
Es gibt eine Statistikbibliothek, wenn Sie Python >= 3.4 verwenden
https://docs.python.org/3/library/statistics.html
Sie können die mittlere Methode wie folgt verwenden. Nehmen wir an, Sie haben eine Liste von Zahlen, aus der Sie den Mittelwert ermitteln möchten.
list = [11, 13, 12, 15, 17]
import statistics as s
s.mean(list)
Es hat auch andere Methoden wie stdev, Varianz, Modus, harmonisches Mittel, Median usw., die sehr nützlich sind.
EDIT:
Ich habe zwei weitere Möglichkeiten hinzugefügt, um den Durchschnitt einer Liste zu ermitteln (die nur für Python 3.8+ relevant sind). Hier ist der Vergleich, den ich gemacht habe:
import timeit
import statistics
import numpy as np
from functools import reduce
import pandas as pd
import math
LIST_RANGE = 10
NUMBERS_OF_TIMES_TO_TEST = 10000
l = list(range(LIST_RANGE))
def mean1():
return statistics.mean(l)
def mean2():
return sum(l) / len(l)
def mean3():
return np.mean(l)
def mean4():
return np.array(l).mean()
def mean5():
return reduce(lambda x, y: x + y / float(len(l)), l, 0)
def mean6():
return pd.Series(l).mean()
def mean7():
return statistics.fmean(l)
def mean8():
return math.fsum(l) / len(l)
for func in [mean1, mean2, mean3, mean4, mean5, mean6, mean7, mean8 ]:
print(f"{func.__name__} took: ", timeit.timeit(stmt=func, number=NUMBERS_OF_TIMES_TO_TEST))
Dies sind die Ergebnisse, die ich erhalten habe:
mean1 took: 0.09751558300000002
mean2 took: 0.005496791999999973
mean3 took: 0.07754683299999998
mean4 took: 0.055743208000000044
mean5 took: 0.018134082999999968
mean6 took: 0.6663848750000001
mean7 took: 0.004305374999999945
mean8 took: 0.003203333000000086
Interessant! Sieht aus wie math.fsum(l) / len(l)
der schnellste Weg ist, dann statistics.fmean(l)
und erst dann sum(l) / len(l)
. Schön!
Danke @Asclepius, dass du mir diese beiden anderen Wege gezeigt hast!
ALTE ANTWORT:
In Bezug auf Effizienz und Geschwindigkeit sind dies die Ergebnisse, die ich beim Testen der anderen Antworten erhalten habe:
# test mean caculation
import timeit
import statistics
import numpy as np
from functools import reduce
import pandas as pd
LIST_RANGE = 10
NUMBERS_OF_TIMES_TO_TEST = 10000
l = list(range(LIST_RANGE))
def mean1():
return statistics.mean(l)
def mean2():
return sum(l) / len(l)
def mean3():
return np.mean(l)
def mean4():
return np.array(l).mean()
def mean5():
return reduce(lambda x, y: x + y / float(len(l)), l, 0)
def mean6():
return pd.Series(l).mean()
for func in [mean1, mean2, mean3, mean4, mean5, mean6]:
print(f"{func.__name__} took: ", timeit.timeit(stmt=func, number=NUMBERS_OF_TIMES_TO_TEST))
und die Ergebnisse:
mean1 took: 0.17030245899968577
mean2 took: 0.002183011999932205
mean3 took: 0.09744236000005913
mean4 took: 0.07070840100004716
mean5 took: 0.022754742999950395
mean6 took: 1.6689282460001778
Der Gewinner ist also eindeutig: sum(l) / len(l)
sum(l) / float(len(l))
ist die richtige Antwort, aber nur der Vollständigkeit halber können Sie einen Durchschnitt mit einer einzigen Reduktion berechnen:
>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114
Beachten Sie, dass dies zu einem leichten Rundungsfehler führen kann:
>>> sum(l) / float(len(l))
20.111111111111111
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.