2016-11-28 4 views
1

То, что я пытаюсь сделать, - это ввести пользовательский ввод столько строк, сколько пожелаете, и сделать его в массив. После этого я хочу найти, где наибольшее число находится в массиве, координату (x, y) типа числа вещей. Я создал исходный массив по-разному, но, например, у меня есть:Найти элемент в двумерном массиве Python

import numpy as np 
    m = [] 
    rows = eval(input("How many rows in the list:")) 
    for row in range(rows): 
     m.append([]) 
     value = eval(input("Enter a row:")) 
     m[row].append(value) 
    m = np.array(m) 
    print(m) 
    M = np.amax(m) 
    print(M) 
    index = np.where(M) 
    print(index) 

Печать только так я могу видеть, что он делает. В финале я просто хочу, чтобы увидеть последнюю строку в этом примере:

Enter the number of rows in the list:3   
    Enter a row: 1,5,6   
    Enter a row: 2,6,7  
    Enter a row: 5,26,12  
    The location of the largest element is at (1, 2) 

Дополнительная информация: Я не волнует, если он использует NumPy из нет. и я не буду против использования отдельных функций, когда я думаю об этом, это может быть хорошей идеей; один для создания массива и отдельный для определения наибольшего числа.

Заранее спасибо.

PS. Как отмечается в комментарии, eval обычно не следует использовать из-за рисков безопасности. Единственная причина, по которой я его использую, заключается в том, что это быстрое задание для школы.

+3

Пожалуйста, не используйте 'eval' для преобразования произвольного пользовательского ввода. 'eval' и' exec' следует избегать, поскольку они могут представлять угрозу безопасности. Для получения дополнительной информации см. [Eval действительно опасно] (http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html) ветеран SO Нед Батчелдер. –

ответ

1

Это реализация без использования NumPy. Это не так эффективно, но отлично работает.

rows = eval(input("How many rows in the list:")) 
m = [] 
for row in range(rows): 
    value = eval(input("Enter a row:")) 
    m.append(value) 

large = m[0][0] 
x = 0 
y = 0 

for i in range(0, rows): 
    for j in range(0, len(m[i])): 
    if(large < m[i][j]): 
    large = m[i][j] 
    y = i 
    x = j 
print(x, y, large) 
1

Это дает (строка, столбец) индекс макс -

import numpy as np 

m = np.array([[1,5,6],[2,6,7],[5,26,12]]) # input minified 
print(m) 

print np.unravel_index(m.argmax(), m.shape) # main code you need 
+0

Это работает в некотором роде. Я думаю, что это имеет какое-то отношение к моим данным и тому, как это список, но его печать трехмерной координаты. EX: его печать (2, 0, 1). Я не знаю, почему нуль есть, и я не хочу его там. – zmorris

+0

@zmorris, что способ ввода вводится Я думаю, что это может быть причиной для 3d вещи ... извините, я использую python 2.7, поэтому eval (input()) давал мне ошибки ... –

+0

да, я так думаю слишком. Спасибо за вашу помощь. – zmorris

Смежные вопросы