2011-10-04 5 views
2

이것은 눈싸움하기 시작한 이전 질문의 파생물입니다. 행렬 A가 있고 각 행 [1 :] 값의 평균/평균을 사용하여 다른 행렬 B를 만들지 만 행 제목을 그대로 유지하려면 어떻게해야합니까? 나는 행렬 A를 포함 시켰고, 목록 작성과 함께 기대하는 결과를 얻었습니다.매트릭스 목록 이해 평균

from operator import sum,len 

# matrix A with row headings and values 
A = [('Apple',0.95,0.99,0.89,0.87,0.93), 
('Bear',0.33,0.25.0.85,0.44,0.33), 
('Crab',0.55,0.55,0.10,0.43,0.22)] 

#List Comprehension 
B = [(A[0],sum,A[1:]/len,A[1:]) for A in A] 

예상 결과

B = [('Apple', 0.926), ('Bear', 0.44), ('Crab', 0.37)] 
+2

하나는 다른 사람들처럼되지 않습니다. 이 데이터가 사전에없는 이유는 무엇입니까? '{APPLE ':(0.95,0.99,0.89,0.87,0.93), ...}' –

+0

'(A [0], 합계, A [1 :]/len, A [1 :])'읽어야합니다. '(A [0], 합계 (A [1 :])/len (A [1 :]))'. 'sum'과'len'은 함수입니다! – Eric

답변

5

귀하의 목록에 이해가 좀 이상해 보인다. iterable 및 항목에 대해 동일한 변수를 사용하고 있습니다.

이 방법은 작동하는 것 같다 :

def average(lst): 
    return sum(lst)/len(lst) 

B = [(a[0], average(a[1:])) for a in A] 

내가 읽을 수있는 기능 average을 만들었습니다. 예상 한 값과 일치하기 때문에 내가 원하는 것 같아요. mul을 사용하면 뭔가를 놓친다는 것을 알 수 있습니다. @recursive 및 @Steven Rumbalski에서 촬영

+0

정의에 대해 걱정하지 않고 단순히 이해 코드 자체에 평균 함수를 포함시키는 방법이 없습니까? 그것은 더 간단 할 것 같습니다. mul을 사용하는 것은 실수였습니다. 나는 합계를 의미했습니다. – Jeff

+0

나는 당신의 해결책을 고맙게 여긴다. 그러나 나는 단순한 사람이다. – Jeff

+1

@Jeff : * 목록 comprehension에서'average()'계산을 포함하지 않음 *은 * 간단합니다. – Johnsyweb

1

: 이러한 것들의

>>> def average(lst): 
...  return sum(lst)/len(lst) 
... 
>>> A = { 
...  'Apple': (0.95, 0.99, 0.89, 0.87, 0.93), 
...  'Bear': (0.33, 0.25, 0.85, 0.44, 0.33), 
...  'Crab': (0.55, 0.55, 0.10, 0.43, 0.22), 
... } 
>>> 
>>> B = [{key: average(values)} for key, values in A.iteritems()] 
>>> B 
[{'Apple': 0.92599999999999993}, {'Bear': 0.44000000000000006}, {'Crab': 0.37}]