파이썬에서 평균 목록을 찾아야합니다. 이것은 지금까지 내 코드입니다
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
목록에 값을 합산하여 값을 나누는 방법을 모르겠습니다.
sum(L) / float(len(L))
. 발신자 코드에서 빈 목록 처리if not L: ...
파이썬에서 평균 목록을 찾아야합니다. 이것은 지금까지 내 코드입니다
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
목록에 값을 합산하여 값을 나누는 방법을 모르겠습니다.
sum(L) / float(len(L))
. 발신자 코드에서 빈 목록 처리if not L: ...
답변:
Python 3.4 이상에서는 다음을 사용할 수 있습니다 statistics.mean()
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import statistics
statistics.mean(l) # 20.11111111111111
이전 버전의 Python에서는 할 수 있습니다
sum(l) / len(l)
파이썬 2에서는 len
float 나누기를 얻기 위해 float 로 변환해야합니다
sum(l) / float(len(l))
사용할 필요가 없습니다 reduce
. 훨씬 느리고 Python 3에서 제거 되었습니다.
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / len(l)
from __future__ import division
, 당신은 그 추악한 제거 할 수 있습니다 float
.
float
못생긴 것처럼, 더 단순하게 유지하고 싶었습니다.
sum(l, 0.0) / len(l)
sum(l) / len(l)
당신은 사용할 수 있습니다 numpy.mean
:
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import numpy as np
print(np.mean(l))
sum(l)/len(l)
np.array(l).mean()
입니다 훨씬 더 빨리.
np.mean(l)
와 np.array(l).mean
같은 속도에 대해, 그리고 sum(l)/len(l)
배 빠른에 관한 것입니다. 내가 사용하는 l = list(np.random.rand(1000))
과정 모두, numpy
방법이 훨씬 빠른 경우가 될 l
것입니다 numpy.array
.
통계 모듈은 한 파이썬 3.4에 첨가 . 평균이라는 평균 을 계산하는 기능이 있습니다. 제공 한 목록의 예는 다음과 같습니다.
from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
statistics.StatisticsError: mean requires at least one data point
대신 더 비밀 ZeroDivisionError: division by zero
을위한 sum(x) / len(x)
솔루션입니다.
reduce()
파이썬이 완벽하게 cromulent sum()
함수를 가질 때 왜 이것을 사용 하겠습니까?
print sum(l) / float(len(l))
( float()
파이썬이 부동 소수점 나누기를하도록 강제해야한다.)
float()
파이썬 3에서는 필요하지 않습니다.
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, variance, mode, harmonic mean, median 등과 같은 다른 방법을 가지고 있습니다.
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
reduce()
빈 목록에 대해 False를 제공 하는 마지막 인수로 0을 False로 바꿀 수 있습니다. 그렇지 않으면 이전과 같은 평균입니다.
float
에 len
?
또는 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
그리고 전체 문서 :
나는 Udacity의 문제를 해결하기 위해 비슷한 질문을했습니다. 내장 함수 대신 내가 코딩했습니다 :
def list_mean(n):
summing = float(sum(n))
count = float(len(n))
if n == []:
return False
return float(summing/count)
평소보다 훨씬 길지만 초보자에게는 상당히 도전적입니다.
False
(integer와 동등)을 반환 하는 것은 0
이 오류를 처리하는 가장 최악의 방법입니다. 더 잘 잡을 수 ZeroDivisionError
있고 더 나은 물건을 키울 수 ValueError
있습니다.
ValueError
보다 나은가 ZeroDivisionError
? 후자는 더 구체적이며, 다른 오류를 다시 던지기 위해 산술 오류를 잡는 것이 약간 필요하지 않은 것 같습니다.
ZeroDivisionError
당신이 계산이 (리스트의 길이에 의해 부서가 관련되어 있음을, 즉) 수행되는 방법을 알고있는 경우에만 유용합니다. 당신이 그것을 모른다면, 그것은 당신이 전달한 가치에 어떤 문제가 있는지 알려주지 않습니다. 반면에 새로운 예외는 더 구체적인 정보를 포함 할 수 있습니다.
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
둘 다 정수 또는 10 이상의 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
@Andrew Clark는 그의 진술에 정확했습니다.
한다고 가정
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
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
l = map(float,l)
print '%.2f' %(sum(l)/len(l))
위의 두 가지 답변을 결합하여 reduce와 함께 작동하고 reduce 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
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)