2010-01-28 5 views
11

У меня есть списокPython: найти среднее из вложенного списка

a = [[1,2,3],[4,5,6],[7,8,9]] 

Теперь я хочу, чтобы найти среднее значение этого внутреннего списка, так что

a = [(1+4+7)/3,(2+5+8)/3,(3+6+9)/3] 

«а» не должен быть вложенным список в конце. Просьба дать ответ на общий случай

+0

что вы пробовали? – SilentGhost

ответ

4
>>> import itertools 
>>> [sum(x)/len(x) for x in itertools.izip(*a)] 
[4, 5, 6] 
10
a = [sum(x)/len(x) for x in zip(*a)] 
# a is now [4, 5, 6] for your example 

В Python 2.x, если вы не хотите, целочисленное деление, замените sum(x)/len(x) на 1.0*sum(x)/len(x) выше.

Documentation for zip.

+0

+1 для почтового индекса, но не могли бы вы спасти себя от лишней функции? ;) –

+0

Я понял, что ОП не слишком хорошо знал Python. Редактирование в любом случае :-) –

4

Если вы numpy установили:

>>> import numpy as np 
>>> a = [[1,2,3],[4,5,6],[7,8,9]] 
>>> arr = np.array(a) 
>>> arr 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 
>>> np.mean(arr) 
5.0 
>>> np.mean(arr,axis=0) 
array([ 4., 5., 6.]) 
>>> np.mean(arr,axis=1) 
array([ 2., 5., 8.]) 
Смежные вопросы