2011-10-09 3 views
1

I는이리스트 오브리스트 -리스트 I가파이썬에서 목록의 매트릭스에서 가장 큰 숫자를 선택하는 방법은 무엇입니까?

list3 = m[x][y] 

세 번째리스트로서 세 번째리스트에 액세스 할 수있는 "매트릭스"로 처음 ​​두 단계는 문자열의 조합을 포함 숫자가 있지만 각 목록의 크기는 &입니다. 이 목록에서 특정 항목을 호출하십시오. Number of Interest. 이 번호는 항상이 목록에서 동일한 색인을가집니다!

은 무엇입니까? 파이썬에서 최대 관심사 수를 가진 목록에 '좌표'(x, y)를 얻는 방법은 무엇입니까?

감사합니다.

(그래서 정말, 나는 m에서 가장 큰 수를 선택하기 위해 노력하고있어 [X] [Y] [K] k는 모든 X & y를위한 고정되는 경우, 그 주소가 무엇인지 '알')

+1

관심있는 세 번째 목록의 요소를 어떻게 알 수 있습니까? –

+0

관심있는 수녀 (또는 이들을 보유하고있는 목록)는 어떤 종류의 기존 순서로 있습니까? 그렇지 않다면 가장 빨리 얻을 수있는 것은 O (n^3)이고, i는 m : j는 i : k는 j :'(정확한 코드가 아님)입니다. –

+0

나는 내가 설정 한 방식 때문에 항상 같은 요소에 관심이있다. – Deniz

답변

4
max((cell[k], x, y) 
    for (y, row) in enumerate(m) 
    for (x, cell) in enumerate(row))[1:] 

또한, 변수의 몇 가지에 직접 결과를 할당 할 수 있습니다 :이 O (N2가) BTW,

(_, x, y) = max((cell[k], x, y) 
       for (y, row) in enumerate(m) 
       for (x, cell) in enumerate(row)) 

입니다. "관심 번호"가정

0

목록 공지 스폿이며, 비제로 최대가 될 것이다

maxCoords = [-1, -1] 
maxNumOfInterest = -1 
rowIndex = 0 
for row in m: 
    colIndex = 0 
    for entry in row: 
     if entry[indexOfNum] > maxNumOfInterest: 
      maxNumOfInterest = entry[indexOfNum] 
      maxCoords = [rowIndex,colIndex] 
     colIndex += 1 
    rowIndex += 1 

은 O이 될 것이다 순진한 방법이다 (N 2)에 행렬의 사이즈 모든 요소를 ​​확인해야하므로 가능한 가장 빠른 솔루션입니다.

@ Marcelo의 방법은 더 즙이 많지만 가독성은 떨어집니다.

+0

읽기 쉽지 않음 ?? –

+0

논리를 이해하는 데 상당한 양의 구문 지식이 필요합니다. 나는 그것을 사용 하겠지만 파이썬에 정통하지 않은 사람들이 왜 코드를 작동시키는지를 가르치려고 시도하는 것은 아닙니다. – brc

+1

목록 내장은 기존 루핑 방법보다 데이터 조작에 대해 생각할 수있는 뛰어난 방법을 제시합니다. 그것들은 새로운 파이썬 프로그래머를 가르치기위한 첫 번째 개념 중 하나입니다. –

3
import itertools 

indexes = itertools.product(xrange(len(m)), xrange(len(m[0])) 
print max(indexes, key = lambda x: m[x[0]][x[1]][k]) 

또는에서

import numpy 
data = numpy.array(m) 
print numpy.argmax(m[:,:,k]) 

NumPy와 파이썬에서 작업을 가속화에 관심이 사용, 당신은 정말 NumPy와 볼 필요가있다.

+1

+1. 모든 솔루션은 본질적으로 O (mn)이지만, 상수 요소는 Python의 메소드 호출 오버 헤드로 높을 수 있습니다. Numpy는 일을 크게 향상시킬 수 있습니다. –

관련 문제