Menemukan rata-rata dari sebuah daftar

Saya harus mencari rata-rata dari sebuah daftar dalam Python. Ini adalah kode saya sejauh ini

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

Saya sudah mendapatkannya sehingga ia menambahkan nilai-nilai dalam daftar, tetapi saya tidak tahu bagaimana cara membaginya?

Mengomentari pertanyaan (7)
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / len(l)
Komentar (8)
Larutan

Pada Python 3.4+ Anda dapat menggunakan statistics.mean()

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

import statistics
statistics.mean(l)  # 20.11111111111111

Pada versi Python yang lebih lama Anda dapat melakukan

sum(l) / len(l)

Pada Python 2 Anda perlu mengkonversi len ke float untuk mendapatkan pembagian float

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

Tidak perlu menggunakan reduce. Ini jauh lebih lambat dan dihapus di Python 3.

Komentar (11)

Anda dapat menggunakan numpy.berarti:

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

import numpy as np
print(np.mean(l))
Komentar (5)

A statistik modul telah ditambahkan ke python 3.4. Ini memiliki fungsi untuk menghitung rata-rata yang disebut berarti. Contoh dengan daftar yang anda berikan akan sama:

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

Mengapa Anda menggunakan fungsi reduce() untuk ini ketika Python memiliki fungsi sum() yang sangat bagus?

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

(Fungsi float() diperlukan untuk memaksa Python melakukan pembagian floating-point).

Komentar (2)

Ada statistik perpustakaan jika anda menggunakan python >= 3.4

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

Anda dapat menggunakan it's berarti metode seperti ini. Let's mengatakan anda memiliki daftar nomor yang ingin anda cari artinya:-

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

Ini memiliki metode lain juga seperti stdev, varians, mode, harmonic mean, median, dll yang terlalu berguna.

Komentar (1)

Bukannya casting untuk mengapung, anda dapat menambahkan 0,0-jumlah:

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

sum(l) / float(len(l)) adalah jawaban yang tepat, tapi hanya untuk kelengkapan anda dapat menghitung rata-rata dengan satu mengurangi:

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

Perhatikan bahwa hal ini dapat mengakibatkan sedikit kesalahan pembulatan:

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

Saya mencoba menggunakan opsi di atas, tetapi didn't bekerja. Coba ini:

dari statistik impor berarti

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

bekerja pada python 3.5

Komentar (0)

Atau menggunakan panda's Seri.berarti metode:

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

Dari docs:

Seri.berarti(axis=Tidak ada, skipna=Ada, tingkat=Tidak ada, numeric_only=Tidak ada, **kwargs)

Dan berikut merupakan dokumentasi untuk ini:

Dan seluruh dokumentasi:

Komentar (1)

Jika anda ingin mendapatkan lebih dari sekedar berarti (alias rata-rata) anda mungkin memeriksa scipy stats

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)
Komentar (0)

Saya punya pertanyaan serupa untuk memecahkan di Udacity´s masalah. Bukan fungsi built-in saya kode:

def list_mean(n):

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

Jauh lebih lama dari biasanya tapi untuk pemula yang cukup menantang.

Komentar (4)

sebagai pemula, saya hanya kode ini:

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)
Komentar (1)

Keduanya dapat memberikan anda dekat dengan nilai-nilai yang sama pada bilangan bulat atau setidaknya 10 nilai desimal. Tapi jika anda benar-benar mempertimbangkan lama mengambang nilai-nilai keduanya dapat berbeda. Pendekatan dapat bervariasi tergantung pada apa yang ingin anda capai.

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

Mengambang nilai-nilai

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

@Andrew Clark adalah benar pada pernyataan-nya.

Komentar (0)

Dalam rangka untuk menggunakan mengurangi untuk mengambil rata-rata berjalan, anda'll perlu untuk melacak total tetapi juga jumlah elemen yang terlihat sejauh ini. sejak itu's tidak sepele elemen dalam daftar, anda'll juga harus melewati mengurangi tambahan argumen untuk melipat ke dalam.

>>> 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
Komentar (1)

misalkan

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

anda dapat melihat bahwa x memiliki dimensi 3*10 jika anda perlu untuk mendapatkan berarti untuk setiap baris yang anda dapat mengetik ini

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

don't lupa untuk mengimpor numpy sebagai np

Komentar (0)

Menemukan rata-rata di daftar Dengan menggunakan berikut PYTHON kode:

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

mencoba ini itu mudah.

Komentar (0)
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

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

Menggabungkan beberapa jawaban diatas, saya've datang dengan berikut yang bekerja dengan mengurangi dan doesn't mengasumsikan anda memiliki L yang tersedia dalam mengurangi fungsi:

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
Komentar (0)
print reduce(lambda x, y: x + y, l)/(len(l)*1.0)

atau seperti yang diposting sebelumnya

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

1.0 adalah untuk memastikan anda mendapatkan floating point division

Komentar (0)