Berechnung des arithmetischen Mittelwerts (eine Art von Durchschnitt) in Python

Gibt es in Python eine integrierte oder Standard-Bibliotheksmethode, um das arithmetische Mittel (eine Art von Durchschnitt) einer Liste von Zahlen zu berechnen?

Mir ist nichts in der Standardbibliothek bekannt. Sie können jedoch Folgendes verwenden:

def mean(numbers): return float(sum(numbers)) / max(len(numbers), 1) >>> mean([1,2,3,4]) 2.5 >>> mean([]) 0.0 

In der Anzahl gibt es numpy.mean() .

NumPy hat eine numpy.mean die ein arithmetisches Mittel ist. Die Verwendung ist so einfach:

 >>> import numpy >>> a = [1, 2, 4] >>> numpy.mean(a) 2.3333333333333335 

In Python 3.4 gibt es ein neues statistics . Sie können jetzt statistics.mean :

 import statistics print(statistics.mean([1,2,4])) # 2.3333333333333335 

Für 3.1-3.3 Benutzer ist die ursprüngliche Version des Moduls auf PyPI unter dem Namen stats verfügbar. Ändere einfach statistics zu stats .

Sie brauchen nicht einmal numpy oder scipy …

 >>> a = [1, 2, 3, 4, 5, 6] >>> print(sum(a) / len(a)) 3 

Verwenden Sie scipy:

 import scipy; a=[1,2,4]; print(scipy.mean(a)); 

Statt zu schweben kannst du folgen

 def mean(nums): return sum(nums, 0.0) / len(nums) 

oder mit Lambda

 mean = lambda nums: sum(nums, 0.0) / len(nums) 
 def avg(l): """uses floating-point division.""" return sum(l) / float(len(l)) 

Beispiele:

 l1 = [3,5,14,2,5,36,4,3] l2 = [0,0,0] print(avg(l1)) # 9.0 print(avg(l2)) # 0.0 
 def list_mean(nums): sumof = 0 num_of = len(nums) mean = 0 for i in nums: sumof += i mean = sumof / num_of return float(mean) 

Ich habe immer angenommen, dass avg aus der eingebauten / stdlib weggelassen wird, weil es so einfach ist wie

 sum(L)/len(L) # L is some list 

und alle Vorbehalte würden bereits in Anrufer-Code für die lokale Verwendung adressiert werden .

Bemerkenswerte Vorbehalte:

  1. Nicht-Float-Ergebnis: In Python2 ist 9/4 2. Um zu lösen, verwenden Sie float(sum(L))/len(L) oder from __future__ import division

  2. Division durch Null: Die Liste kann leer sein. lösen:

     if not L: raise WhateverYouWantError("foo") avg = float(sum(L))/len(L) 

Die richtige Antwort auf Ihre Frage ist die Verwendung von statistics.mean . Aber zum Spaß, hier ist eine Version von mean, die nicht die function len() verwendet, so dass sie (wie statistics.mean ) auf Generatoren verwendet werden kann, die len() nicht unterstützen:

 from functools import reduce from operator import truediv def ave(seq): return truediv(*reduce(lambda a, b: (a[0] + b[1], b[0]), enumerate(seq, start=1), (0, 0))) 

Andere haben bereits sehr gute Antworten gepostet, aber einige Leute suchen vielleicht immer noch nach einem klassischen Weg, um Mittel (avg) zu finden, also poste ich dies (in Python 3.6 getestet):

 def meanmanual(listt): mean = 0 lsum = 0 lenoflist = len(listt) for i in listt: lsum += i mean = lsum / lenoflist return float(mean) a = [1, 2, 3, 4, 5, 6] meanmanual(a) Answer: 3.5