it-swarm.com.de

Ermitteln des Durchschnitts einer Liste

Ich muss den Durchschnitt einer Liste in Python finden. Das ist mein Code soweit

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)

Ich habe es so, dass es die Werte in der Liste addiert, aber ich weiß nicht, wie ich es in sie aufteilen soll.

415
Carla Dessi

Wenn Ihre Reduzierung bereits Ihre Summe zurückgibt, müssen Sie nur noch teilen.

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l) / len(l)

obwohl sum(l)/len(l) einfacher wäre, da Sie kein Lambda benötigen würden.

Wenn Sie ein genaueres float-Ergebnis anstelle eines int wünschen, verwenden Sie einfach float(len(l)) anstelle von len(l).

487
Herms
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / float(len(l))
503
yprez

Oder Sie könnten numpy.mean verwenden:

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

import numpy as np
print np.mean(l)
267
Akavall

Ein Statistik Modul wurde hinzugefügt zu python 3.4 . Es hat eine Funktion, um den Durchschnitt zu berechnen, der Mittelwert genannt wird. Ein Beispiel mit der von Ihnen angegebenen Liste wäre:

from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
220

Warum sollten Sie dafür reduce() verwenden, wenn Python eine perfekt angepasste sum() -Funktion hat?

print sum(l) / float(len(l))

(Die Funktion float() ist erforderlich, um Python zu zwingen, eine Gleitkommadivision durchzuführen.)

44
kindall

Wenn Sie python> = 3.4 verwenden, gibt es eine Statistikbibliothek

https://docs.python.org/3/library/statistics.html

Sie können es mittlere Methode wie folgt verwenden. Angenommen, Sie haben eine Liste mit Zahlen, deren Mittelwert Sie ermitteln möchten:

list = [11, 13, 12, 15, 17]
import statistics as s
s.mean(list)

Es gibt auch andere Methoden wie stdev, varance, mode, harmonic mean, median usw., die zu nützlich sind.

32
Chetan Sharma

Anstatt zu schweben, können Sie der Summe 0.0 hinzufügen:

def avg(l):
    return sum(l, 0.0) / len(l)
18
Maxime Chéramy

sum(l) / float(len(l)) ist die richtige Antwort, aber nur der Vollständigkeit halber können Sie einen Durchschnitt mit einer einzelnen Reduzierung 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
10
Andrew Clark

Ich habe versucht, die oben genannten Optionen zu verwenden, aber es hat nicht funktioniert. Versuche dies:

from statistics import mean

n = [11, 13, 15, 17, 19]
print(n)
print(mean(n))

arbeitete an python 3.5

7
Ngury Mangueira

Oder verwenden Sie die Series.mean -Methode von pandas:

pd.Series(sequence).mean()

Demo:

>>> import pandas as pd
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> pd.Series(l).mean()
20.11111111111111
>>> 

Aus den Dokumenten:

Series.mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

Und hier ist die Dokumentation dazu:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mean.html

Und die ganze Dokumentation:

https://pandas.pydata.org/pandas-docs/stable/10min.html

5
U10-Forward

als Anfänger habe ich gerade Folgendes codiert:

L = [15, 18, 2, 36, 12, 78, 5, 6, 9]

total = 0

def average(numbers):
    total = sum(numbers)
    total = float(total)
    return total / len(numbers)

print average(L)
4
leo0019

Ich hatte eine ähnliche Frage bei den Problemen einer Udacity zu lösen. Anstelle einer eingebauten Funktion habe ich geschrieben:

def list_mean(n):

    summing = float(sum(n))
    count = float(len(n))
    if n == []:
        return False
    return float(summing/count)

Viel länger als gewöhnlich, aber für einen Anfänger ist es eine ziemliche Herausforderung.

4
Paulo YC

Wenn Sie mehr als nur den Mittelwert (auch bekannt als Durchschnitt) erhalten möchten, sollten Sie sich die Scipy-Statistiken ansehen

from scipy import stats
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(stats.describe(l))

# DescribeResult(nobs=9, minmax=(2, 78), mean=20.11111111111111, 
# variance=572.3611111111111, skewness=1.7791785448425341, 
# kurtosis=1.9422716419666397)
4
jasonleonhard

Beides kann nahe an ähnlichen Werten für eine Ganzzahl oder mindestens 10 Dezimalwerte liegen. Wenn Sie jedoch lange schwebende Werte in Betracht ziehen, können beide Werte unterschiedlich sein. Der Ansatz kann variieren, was Sie erreichen möchten.

>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> print reduce(lambda x, y: x + y, l) / len(l)
20
>>> sum(l)/len(l)
20

Fließende Werte

>>> print reduce(lambda x, y: x + y, l) / float(len(l))
20.1111111111
>>> print sum(l)/float(len(l))
20.1111111111

@ Andrew Clark war in seiner Aussage richtig.

3
Superpaul

Um reduce für die Ermittlung eines laufenden Durchschnitts zu verwenden, müssen Sie die Gesamtzahl, aber auch die Gesamtzahl der bisher angezeigten Elemente nachverfolgen. da dies kein triviales Element in der Liste ist, müssen Sie reduce ein zusätzliches Argument übergeben, in das Sie einklappen können.

>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> running_average = reduce(lambda aggr, elem: (aggr[0] + elem, aggr[1]+1), l, (0.0,0))
>>> running_average[0]
(181.0, 9)
>>> running_average[0]/running_average[1]
20.111111111111111

nehme an, dass

x = [[-5.01,-5.43,1.08,0.86,-2.67,4.94,-2.51,-2.25,5.56,1.03], [-8.12,-3.48,-5.52,-3.78,0.63,3.29,2.09,-2.13,2.86,-3.33], [-3.68,-3.54,1.66,-4.11,7.39,2.08,-2.59,-6.94,-2.26,4.33]]

sie können feststellen, dass x die Dimension 3 * 10 hat, wenn Sie das mean für jede Zeile benötigen, die Sie eingeben können

theMean = np.mean(x1,axis=1)

vergiss nicht, import numpy as np

3
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

l = map(float,l)
print '%.2f' %(sum(l)/len(l))
1
user1871712

Ermitteln des Durchschnitts in der Liste Verwenden Sie den folgenden PYTHON Code:

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(sum(l)//len(l))

versuche es einfach.

1
Mani Kandan

Wenn ich ein paar der obigen Antworten kombiniere, habe ich die folgenden gefunden, die mit "Reduzieren" funktionieren und nicht davon ausgehen, dass in der Reduzierungsfunktion L verfügbar ist:

from operator import truediv

L = [15, 18, 2, 36, 12, 78, 5, 6, 9]

def sum_and_count(x, y):
    try:
        return (x[0] + y, x[1] + 1)
    except TypeError:
        return (x + y, 2)

truediv(*reduce(sum_and_count, L))

# prints 
20.11111111111111
0
reubano

Ich möchte nur einen anderen Ansatz hinzufügen

import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)
0
Taylan
print reduce(lambda x, y: x + y, l)/(len(l)*1.0)

oder wie zuvor gepostet

sum(l)/(len(l)*1.0)

Der Wert 1.0 soll sicherstellen, dass Sie eine Gleitkommadivision erhalten

0
RussS