2016-11-28 14 views
1

私がしようとしているのは、希望通りに多くの行に対してユーザー入力を行い、配列にすることです。その後、配列の中で最も高い数字がどこにあるのか、数値型のものの(x、y)座標を見つけたいと思います。私は別の方法で初期の配列を作成しているが、例えば、私は持っている:2次元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のを使用している場合、私は気にしないでください。私は別の機能を使用することに反対することはありませんが、私はそれについて考えてみると良いアイデアかもしれません。 1つは配列を作成し、別の配列は最大の番号を探します。

ありがとうございます。

PS。コメントによると、evalはセキュリティリスクのために通常は使用されるべきではありません。私がそれを使用している唯一の理由は、これが学校のための迅速な割り当てだからです。

+3

「eval」を使用して任意のユーザー入力を変換しないでください。 'eval'と' exec'はセキュリティ上のリスクとなる可能性があるため、一般的に避けてください。詳細は、SOベテランNed Batchelderの[Eval really dangerous](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html)を参照してください。 –

答えて

1

を。それは効率的ではありませんが、うまく動作します。

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

これは、最大の(行、列)のインデックスが得られる - これはnumpyのを使用せずに実装され

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

それは方法で動作します。私はそれが私の入力と何か関係があると思いますが、そのリストはどのように3次元座標を印刷しているのでしょうか。 EX:その印刷(2、0、1)。私はなぜそこにゼロがあるのか​​分からず、私はそれが欲しくない。 – zmorris

+0

@zmorris入力が供給されている方法だと思うのですが、それは3dの理由かもしれません...残念ですが、python 2.7を使用していますので、eval(input())はエラーを出していました... –

+0

あまりにも。ご協力いただきありがとうございます。 – zmorris