Вопрос:

Нахождение среднего из списка

python list lambda average reduce

1050488 просмотра

22 ответа

3224 Репутация автора

Я должен найти среднее значение списка в Python. Это мой код до сих пор

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

У меня есть, поэтому он складывает значения в списке, но я не знаю, как разделить их на них?

Автор: Carla Dessi Источник Размещён: 27.01.2012 08:58

Ответы (22)


483 плюса

23436 Репутация автора

Решение

Если ваша скидка уже возвращает вашу сумму, то вам остается только делить.

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

Автор: Herms Размещён: 27.01.2012 09:00

489 плюса

10875 Репутация автора

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / float(len(l))
Автор: yprez Размещён: 27.01.2012 09:01

42 плюса

133198 Репутация автора

Зачем вам использовать reduce()это, когда Python имеет совершенно громоздкую sum()функцию?

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

( float()Необходимо заставить Python выполнять деление с плавающей запятой.)

Автор: kindall Размещён: 27.01.2012 09:02

0 плюса

14941 Репутация автора

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

или как опубликовано ранее

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

1.0 - убедиться, что вы получили деление с плавающей запятой

Автор: RussS Размещён: 27.01.2012 09:03

3 плюса

116052 Репутация автора

Для того, чтобы использовать 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
Автор: SingleNegationElimination Размещён: 27.01.2012 09:04

10 плюса

150339 Репутация автора

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
Автор: Andrew Clark Размещён: 27.01.2012 09:17

261 плюса

43505 Репутация автора

Или вы можете использовать numpy.mean :

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

import numpy as np
print np.mean(l)
Автор: Akavall Размещён: 28.01.2012 03:59

1 плюс

155 Репутация автора

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

l = map(float,l)
print '%.2f' %(sum(l)/len(l))
Автор: user1871712 Размещён: 04.12.2012 05:47

212 плюса

17414 Репутация автора

Модуль статистики был добавлен в Python 3.4 . У него есть функция для расчета среднего, называемого средним . Пример с предоставленным вами списком будет:

from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
Автор: Marwan Alsabbagh Размещён: 12.01.2014 06:34

18 плюса

10405 Репутация автора

Вместо того, чтобы бросать в плавающее, вы можете добавить 0.0 к сумме:

def avg(l):
    return sum(l, 0.0) / len(l)
Автор: Maxime Chéramy Размещён: 06.02.2014 10:58

4 плюса

41 Репутация автора

У меня был похожий вопрос для решения проблем Udacity. Вместо встроенной функции я кодировал:

def list_mean(n):

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

Гораздо дольше, чем обычно, но для новичка это довольно сложно.

Автор: Paulo YC Размещён: 16.02.2015 10:27

3 плюса

61 Репутация автора

Оба могут дать вам близкие к аналогичным значениям по целому или по крайней мере 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

@ Эндрю Кларк был прав в своем заявлении.

Автор: Superpaul Размещён: 08.09.2015 05:24

6 плюса

69 Репутация автора

Я попытался использовать варианты выше, но не сработало. Попробуй это:

from statistics import mean

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

работал на питоне 3.5

Автор: Ngury Mangueira Размещён: 03.12.2015 07:27

0 плюса

2640 Репутация автора

Комбинируя пару приведенных выше ответов, я пришел к следующему, которое работает с Reduce и не предполагает, что вы имеете Lдоступ к функции Reduction:

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
Автор: reubano Размещён: 12.01.2016 01:22

4 плюса

163 Репутация автора

как новичок, я только что написал это:

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)
Автор: leo0019 Размещён: 18.01.2016 05:22

0 плюса

465 Репутация автора

Я хочу добавить еще один подход

import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)
Автор: Taylan Размещён: 20.04.2016 08:30

-6 плюса

17 Репутация автора

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)
Автор: Oscar Wade Размещён: 25.04.2016 09:56

3 плюса

139 Репутация автора

Предположим, что

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

Автор: Mohamed A M-Hassan Размещён: 22.03.2017 03:14

28 плюса

1006 Репутация автора

Есть библиотека статистики, если вы используете 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, дисперсия, мода, среднее гармоническое, медиана и т. Д., Которые слишком полезны.

Автор: Chetan Sharma Размещён: 11.05.2017 08:22

4 плюса

2486 Репутация автора

Если вы хотите получить больше, чем просто среднее значение (среднее), вы можете проверить статистику 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)
Автор: jasonleonhard Размещён: 12.02.2018 10:39

4 плюса

21744 Репутация автора

Или используйте pandas«s 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

Автор: U9-Forward Размещён: 17.10.2018 01:03

0 плюса

23 Репутация автора

Найти среднее значение в списке, используя следующий код PYTHON :

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

попробуйте это легко.

Автор: Mani Kandan Размещён: 13.06.2019 09:04
Вопросы из категории :
32x32