2016-11-28 52 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」,因爲它們可能存在安全風險。有關詳情,請參閱SO老將Ned Batchelder的[Eval really dangerous](http://edbatchelder.com/blog/201206/eval_really_is_dangerous.html)。 –

回答

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(輸入())給我錯誤... –

+0

是的,我認爲這樣太。謝謝你的幫助。 – zmorris