2012-10-25 2 views
2

파이썬에서 2 차원 목록을 사용하고 있습니다. 목록의 모든 항목의 합계를 찾아서 가장 낮은 값의 색인을 반환해야합니다.2 차원 목록에서 최소 합계를 갖는 행 인덱스를 반환하십시오. Python

그것은 다음과 같이 반환해야는 :

def Row(S): 
count=0 
for r in range(len(S[0])): 
    for c in range(len(S)): 
     count += sum([r]) 
     return r 

내가있는 indice을 반환 쉘의 코드를 얻을 수 없습니다

Row([[1000, 30], [12, 23], [560, 30, 1]]) 
1 
Row([[10, 9], [20, 1, 2], [1, 3]]) 
2 

이것은 내가 지금까지 셸에서 무엇을 가지고 가장 낮은 합계를 갖는 2 차원 목록. 어떤 아이디어?

+0

그래서 무엇이 문제입니까? –

답변

0
def row(data): 
    sums = [sum(x) for x in data] 
    return sums.index(min(sums)) 

print row([[1000, 30], [12, 23], [560, 30, 1]]) 
1

당신은 한 라인에서 작업을 수행 할 수 있습니다

minidx = min(enumerate(data), key=lambda x:sum(x[1]))[0] 

내가 (대신 결과를 색인의) 포장을 해체 할 것을 선호하지만 :

minidx, minlist = min(enumerate(data), key=lambda x:sum(x[1])) 

이 측면의 이점이 있습니다 최소 합계가있는리스트에서 빠른 핸들을 얻을 수 있습니다. 인덱스를 얻으면 쉽게 얻을 수 있지만 ...

1

min에 "키"를 지정하여 임의의 기준에 따라 최소값을 얻을 수 있습니다. 이 기능을 사용하면 한 줄로 처리 할 수 ​​있습니다.

def min_sum(data): 
    return min(xrange(len(data)), key=lambda i: sum(data[i])) 
+0

좋은 답변 (+1). 기본적으로 내 것과 같습니다. 나는'xrange (len (data))'를 피하고 싶지만,'λ x : sum (x [1])'도 피하는 것을 좋아합니다. 어떤 것이 더 좋은지 잘 모르겠다. – mgilson

+0

믹스에서 numpy를 던지기를 꺼려한다면, 람다를 피하기 위해'np.argmin'을 사용할 수있다. – wim

+0

@wim - 나는 너의 numpy을 잘 모르겠다. 해결책. 하위 목록의 길이가 모두 같으면 동의 할 거라고 생각합니다. 그러나 길이가 같지 않기 때문에 어떻게해야하는지 모르겠습니다. (그러나 언제나처럼, 당신이 numpy 솔루션을 가지고 있다면, 나는 다른 사람들이 배울 수 있도록 게시 해주십시오.) – mgilson

관련 문제