2014-06-12 7 views
0

행렬의 행 개수를 묻는 메시지가 표시되면 해당 행의 요소를 입력하라는 메시지가 표시되면 해당 행렬에서 가장 큰 요소를 찾아 위치 (행과 열)를 반환해야합니다. . I 2 개 행을 입력하면행렬에서 가장 큰 원소 찾기

예를 들어, 다음과 같이

[1 3 7 [4 8 1]

최대 요소의 위치에있을 것이다 (1,1) 의미 행 인덱스 1 열 인덱스 1

I가 반이 위치 얻기 위해 노력하고 다음 코드 :

def main(): 
    matrix = [] 

    numRows = eval(input("Enter the number of rows in the list: ")) 
    for i in range(numRows): 
     rows = input("Enter a row: ") 
     items = rows.split() 
     list = [eval(x) for x in items] 
     matrix.append(list) 

    return locateLargest(matrix) 

def locateLargest(a): 

    for i in range(len(a)): 
     indexOfMaxRow = 0 
     maxRow = max(a[i]) 

     for row in range(len(a)): 
      if max(a[row]) > maxRow: 
       maxRow = max(a[row]) 
       indexOfMaxRow = row 

    for j in range(len(a)): 
     indexOfMaxColumn = 0 
     maxColumn = max(a[j]) 

     for column in range(len(a)): 
      if max(a[column]) > maxColumn: 
       maxColumn = max(a[column]) 
       indexOfMaxColumn = column 

    print("The location of the largest element is at (", indexOfMaxRow, ", ", indexOfMaxColumn, ")") 

main() 

을 내 코드에서 잘못된 생각결과가 인쇄 될 때까지 모든 것이 작동하기 때문입니다. 아무도 그걸로 잘못 무엇을 조언 할 수 있습니까? 모든 입력에 미리 감사드립니다!

+0

가능성 있음 : http://stackoverflow.com/a/23554004/103081 – Paul

답변

1

귀하의 locateLargest 기능은 훨씬 더 간단 할 수있다 :

def locateLargest(matrix): 
    largest_num = None 
    row = None 
    col = None 

    for row_idx, row in enumerate(matrix): 
     for col_idx, num in enumerate(row): 
      if num > largest_num or largest_num is None: 
       largest_num = num 
       row = row_idx 
       col = col_idx 

    return (largest_num, row, col) 

이 기능은 가장 많은뿐만 아니라 열과 행의 인덱스 (0부터 시작하는 인덱스)를 반환합니다.

예 :

>>> print(locateLargest([[1, 2, 3], [4, 5, 6], [7, 8, 9]])) 
(9, 2, 2) 
+0

감사합니다. 나는 그것을 꼬집고 print()를 사용했다. 그러나 그것은 작동한다 :) – annabananana7

1

지나치게 복잡 :

A = [[1, 3, 7], 
    [4, 8, 1]] 

def max_element(A): 
    r, (c, l) = max(map(lambda t: (t[0], max(enumerate(t[1]), key=lambda v: v[1])), enumerate(A)), key=lambda v: v[1][1]) 
    return (l, r, c) 

print max_element(A) 

인쇄

(8, 1, 1) 
2

numpy를 사용하면, 어레이 내의 최대 값의 인덱스 일 수있다 쉽게 찾을 수 :

import numpy as np 
na = np.array(a) 
indices = np.where(na == na.max())