Поиск среднего списка
Мне нужно найти среднее значение списка в Python. Это мой код до сих пор
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
У меня есть это, поэтому он добавляет вместе значения в список, но я не знаю, как заставить его делиться на них?
Ответы
Ответ 1
Если ваше сокращение уже возвращает вашу сумму, тогда все, что вам осталось сделать, это разделить.
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l) / len(l)
хотя sum(l)/len(l)
будет проще, так как вам не понадобится лямбда.
Если вы хотите получить более точный результат с плавающей точкой вместо int, просто используйте float(len(l))
вместо len(l)
.
Ответ 2
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / float(len(l))
Ответ 3
Или вы можете использовать numpy.mean:
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import numpy as np
print np.mean(l)
Ответ 4
A statistics модуль был добавлен в python 3.4. Он имеет функцию для вычисления среднего значения mean. Пример с предоставленным вами списком:
from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
Ответ 5
Зачем вам использовать reduce()
для этого, когда у Python есть отличная cromulent функция sum()
?
print sum(l) / float(len(l))
(float()
необходимо заставить Python выполнять разделение с плавающей запятой.)
Ответ 6
Есть библиотека статистики, если вы используете python> = 3.4
https://docs.python.org/3/library/statistics.html
Вы можете использовать это значит метод, как это. Допустим, у вас есть список чисел, которые вы хотите найти в виду: -
list = [11, 13, 12, 15, 17]
import statistics as s
s.mean(list)
У него есть и другие методы, такие как stdev, дисперсия, мода, среднее гармоническое, медиана и т.д., Которые слишком полезны.
Ответ 7
Вместо того, чтобы кастинг для float, вы можете добавить 0.0 к сумме:
def avg(l):
return sum(l, 0.0) / len(l)
Ответ 8
sum(l) / float(len(l))
- правильный ответ, но только для полноты вы можете вычислить среднее значение с одним уменьшением:
>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114
Обратите внимание, что это может привести к небольшой ошибке округления:
>>> sum(l) / float(len(l))
20.111111111111111
Ответ 9
Я попытался использовать вышеперечисленные опции, но не работал.
Попробуйте следующее:
from statistics import mean
n = [11, 13, 15, 17, 19]
print(n)
print(mean(n))
работал на python 3.5
Ответ 10
У меня был аналогичный вопрос для решения проблем Udacity. Вместо встроенной функции я закодировано:
def list_mean(n):
summing = float(sum(n))
count = float(len(n))
if n == []:
return False
return float(summing/count)
Гораздо больше, чем обычно, но для новичков это довольно сложно.
Ответ 11
как новичок, я просто закодировал это:
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)
Ответ 12
Если вы хотите получить больше, чем просто среднее значение (среднее), вы можете проверить статистику scipy
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)
Ответ 13
Или используйте метод pandas
Series.mean
:
pd.Series(sequence).mean()
Демо - версия:
>>> import pandas as pd
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> pd.Series(l).mean()
20.11111111111111
>>>
Из документов:
Series.mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
¶
И вот документы для этого:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mean.html
И вся документация:
https://pandas.pydata.org/pandas-docs/stable/10min.html
Ответ 14
Чтобы использовать reduce
для выполнения среднего значения, вам нужно будет отслеживать общее количество, а также общее количество элементов, которые были просмотрены до сих пор. так как это не тривиальный элемент в списке, вам также придется передать reduce
дополнительный аргумент, чтобы свернуть.
>>> 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
Оба могут приблизиться к аналогичным значениям на целое число или не менее 10 десятичных значений. Но если вы действительно рассматриваете длинные плавающие значения, то они могут быть разными. Подход может варьироваться в зависимости от того, чего вы хотите достичь.
>>> 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
Плавающие значения
>>> print reduce(lambda x, y: x + y, l) / float(len(l))
20.1111111111
>>> print sum(l)/float(len(l))
20.1111111111
@Андрю Кларк был прав в своем заявлении.
Ответ 16
предположим, что
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]]
вы можете заметить, что x
имеет размер 3 * 10, если вам нужно получить mean
для каждой строки, которую вы можете ввести в этом
theMean = np.mean(x1,axis=1)
не забывайте 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
print reduce(lambda x, y: x + y, l)/(len(l)*1.0)
или как ранее размещено
sum(l)/(len(l)*1.0)
1.0 - убедиться, что вы получаете деление с плавающей запятой
Ответ 19
Объединив пару вышеупомянутых ответов, я придумал следующее, которое работает с уменьшением и не предполагает, что у вас есть L
, доступный внутри функции уменьшения:
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
Ответ 20
Я хочу добавить только другой подход
import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)
Ответ 21
Найти среднее значение в списке, используя следующий код PYTHON:
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(sum(l)//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)