Het gemiddelde van een lijst vinden

Ik moet het gemiddelde van een lijst in Python vinden. Dit is mijn code tot nu toe

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

Ik heb het zo dat het de waarden in de lijst bij elkaar optelt, maar ik weet niet hoe ik het erin moet verdelen?


Antwoord 1, autoriteit 100%

Op Python 3.4+ kun je statistics.mean()

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import statistics
statistics.mean(l)  # 20.11111111111111

Op oudere versies van Python kun je dat doen

sum(l) / len(l)

Op Python 2 moet je lenconverteren naar een float om een float-deling te krijgen

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

Het is niet nodig om reducete gebruiken. Het is veel langzamer en werd verwijderdin Python 3.


Antwoord 2, autoriteit 80%

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

Antwoord 3, autoriteit 44%

Je kunt numpy.mean:

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import numpy as np
print(np.mean(l))

Antwoord 4, autoriteit 34%

Een statistieken-module is toegevoegd aan python 3.4. Het heeft een functie om het gemiddelde te berekenen, genaamd gemiddelde. Een voorbeeld van de lijst die u heeft opgegeven, is:

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

Antwoord 5, autoriteit 7%

Waarom zou je hiervoor reduce()gebruiken als Python een perfect cromulente functie sum()heeft?

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

(De float()is nodig om Python te dwingen een deling met drijvende komma uit te voeren.)


Antwoord 6, autoriteit 5%

Er is een statistiekenbibliotheek als u python >= 3.4 gebruikt

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

Je kunt zijn gemene methode op deze manier gebruiken. Laten we zeggen dat je een lijst hebt met getallen waarvan je het gemiddelde wilt vinden:-

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

Het heeft ook andere methoden, zoals stdev, variantie, modus, harmonisch gemiddelde, mediaan, enz. die te nuttig zijn.


Antwoord 7, autoriteit 3%

In plaats van te casten om te zweven, kun je 0,0 bij de som optellen:

def avg(l):
    return sum(l, 0.0) / len(l)

Antwoord 8

sum(l) / float(len(l))is het juiste antwoord, maar voor de volledigheid kun je een gemiddelde berekenen met een enkele reductie:

>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114

Merk op dat dit kan resulteren in een kleine afrondingsfout:

>>> sum(l) / float(len(l))
20.111111111111111

Antwoord 9

Ik heb geprobeerd de bovenstaande opties te gebruiken, maar werkte niet.
Probeer dit:

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

werkte aan python 3.5


Antwoord 10

In termen van efficiëntie en snelheid zijn dit de resultaten die ik kreeg bij het testen van de andere antwoorden:

# test mean caculation
import timeit
import statistics
import numpy as np
from functools import reduce
import pandas as pd
LIST_RANGE = 10000000000
NUMBERS_OF_TIMES_TO_TEST = 10000
l = list(range(10))
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))

en de resultaten:

mean1 took:  0.17030245899968577
mean2 took:  0.002183011999932205
mean3 took:  0.09744236000005913
mean4 took:  0.07070840100004716
mean5 took:  0.022754742999950395
mean6 took:  1.6689282460001778

Zo duidelijk de winnaar is:
sum(l) / len(l)


11

Ik had een soortgelijke vraag om problemen op te lossen in de problemen van een Udacity. In plaats van een ingebouwde functie die ik heb gecodeerd:

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

Veel langer dan normaal, maar voor een beginner zijn vrij uitdagend.


12

Als een beginner, heb ik dit gewoon gecodeerd:

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)

13

Als u meer wilde krijgen dan alleen het gemiddelde (AKA-gemiddelde), kunt u scipy-statistieken controleren

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)

14

Om reducevoor het nemen van een hardingsgemiddelde, moet u het totaal bijhouden, maar ook het totale aantal elementen dat tot nu toe wordt gezien. Omdat dat geen triviaal element in de lijst staat, moet u ook doorgeven reduceeen extra argument om in te vouwen.

>>> 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

15

Beide kunnen u in de buurt van vergelijkbare waarden geven op een geheel of ten minste 10 decimale waarden. Maar als u echt overweegt met lange drijvende waarden, kunnen beide verschillend zijn. Aanpak kan variëren op wat u wilt bereiken.

>>> 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

Drijvende waarden

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

@Andrew Clark was correct op zijn verklaring.


16

Stel dat

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]
]

U kunt opmerken dat xdimensie 3 * 10 heeft als u de meannaar elke rij moet krijgen, kunt u dit typen

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

Vergeet niet op import numpy as np


17

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
l = map(float,l)
print '%.2f' %(sum(l)/len(l))

18

Zoek het gemiddelde in de lijst
Door het volgende Python Code te gebruiken:

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

Probeer dit eenvoudig.


19

print reduce(lambda x, y: x + y, l)/(len(l)*1.0)

of zoals eerder gepost

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

De 1.0 is om ervoor te zorgen dat u een drijvende divisie krijgt


20

Combineren van een paar van de bovenstaande antwoorden, heb ik het volgende bedacht die werkt met het verminderen en neemt niet aan dat je Lbeschikbaar hebt binnen de reducerende functie:

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

21

Ik wil gewoon een andere aanpak toevoegen

import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)

22

numbers = [0,1,2,3]
numbers[0] = input("Please enter a number")
numbers[1] = input("Please enter a second number")
numbers[2] = input("Please enter a third number")
numbers[3] = input("Please enter a fourth number")
print (numbers)
print ("Finding the Avarage")
avarage = int(numbers[0]) + int(numbers[1]) + int(numbers[2]) + int(numbers [3]) / 4
print (avarage)

Other episodes