2013-08-30 3 views
4

반복적 인 프로세스에 의해 생성 된 목록이 있으며, 그 목록은 가변 개수의 하위 목록으로 구성되며 요소 수는 동일합니다. 또한 가변적이다.하위 목록의 평균 요소

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

및 코드의 다음 반복에서 I은 할 수있다 : 예를 들어, 하나의 반복에 정말 같이 3 개 소자 4 개 하위 목록을 각각 가질 수 있으며, 3 개 하위 목록 인

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

각 5 요소.

주어진 반복에 대해 모든 하위 목록에는 항상 과 동일한 개의 요소가 있습니다.

나는 각각의 하위 목록에서 같은 위치에있는 모든 요소의 평균을 포함, list_i 중 반복 i새로운 목록을 생성하는 방법이 필요합니다.

avrg_list = [4.0, 4.25, 5.75] 

list_2에 대한 두 번째 경우 : 그래서 list_1에 대한 첫 번째 경우에 나는 얻을 것

avrg_list = [1.67, 5.67, 7.67, 2.33, 4.67] 

내가 유연한 코드로이 작업을 수행 할 수있는 방법이 다른 번호에 자신을 조정합니다 하위 목록과 요소는 무엇입니까?

+0

당신은 python의 기능적 프로그래밍 기능인 map, filter, reduce, lambda를 봐야합니다. – Hrishi

답변

5

당신은 NumPy와 사용에 관심이 있습니까?

In [19]: list_1 = [[1,3,5], [7,4,9], [3,6,2], [5,4,7]] 
In [22]: np.mean(list_1, 0) 
Out[22]: array([ 4. , 4.25, 5.75]) 
+0

이 답변은 Ashwini의 답변보다 훨씬 쉽습니다. 이제 어느 것을 선택해야할지 모르겠습니다. – Gabriel

+0

당신은 python으로 태그를 붙 였고, 그의 표준 파이썬 (나는 더 인상적이다)을 사용하고있다. 나는 그와 함께 갈 것이다. – Hammer

+0

나는 결코 파이썬과 numpy를 다른 엔티티로 생각하지 않았다. . 두 답변 모두 정말 좋습니다. 다른 사람들의 의견을 듣고 자신이 투표 한 것을보기 위해 잠시 기다려 드리겠습니다. – Gabriel

4

사용 zip*으로 :

>>> [sum(x)/float(len(x)) for x in zip(*list_1)] 
[4.0, 4.25, 5.75] 
>>> [sum(x)/float(len(x)) for x in zip(*list_2)] 
[1.6666666666666667, 5.666666666666667, 7.666666666666667, 2.3333333333333335, 4.666666666666667] 

docs에서 : * 연산자와 함께

zip()는리스트를 압축 해제하는데 사용될 수있다.

>>> zip(*list_1) 
[(1, 7, 3, 5), (3, 4, 6, 4), (5, 9, 2, 7)] 

타이밍 비교 :

>>> from itertools import izip 
>>> import numpy as np 
>>> lis = list_1*1000 
>>> arr = np.array(lis) 
>>> %timeit np.mean(lis, 0) 
10 loops, best of 3: 31.9 ms per loop 
>>> %timeit np.mean(arr, 0) 
1000 loops, best of 3: 221 us per loop #clear winner 
>>> %timeit [sum(x)/float(len(x)) for x in zip(*lis)] 
100 loops, best of 3: 826 us per loop 
#itertools.izip is memory efficient. 
>>> %timeit [sum(x)/float(len(x)) for x in izip(*lis)] 
100 loops, best of 3: 881 us per loop 
+0

O.O 잘 놀랍도록 빠르고 효율적이었습니다. 고마워요! – Gabriel

+0

우수! 'round (sum (x)/float (len (x)), 2)' – iCodez