2016-05-25 3 views
0

私はこのようになります多次元配列を持っている:私は行列内の最初のスポットで値を見つけたい場合はマトリックスのインデックス数を変更するにはどうすればよいですか? (パイソン)

matrix = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] 

私はこのような何かしなければならないでしょう:

matrix[0][0] 

座標を入力しなくても、特定の位置を求めることができる位置を見つけることができますか?

だから、私は第二の位置を望んでいた場合、私はちょうど入力

matrix[2] 

の代わりを希望入力

matrix[1] 

代わりの

matrix[0][0] 

私は最初の位置を望んでいた場合だろうと言います

matrix[1][0] 

など。

ありがとうございます。

+0

、あなたがこれを行うにはしたくない理由の両方と互換性がありますか?これは、マトリックス内の情報にアクセスする奇妙な方法です。可能な解決策は、行列を平坦化することですが、それはコードの他の部分について行列形式にする必要があるかどうかによって異なります。 –

+0

それはゲームのためです。たびに位置を入力するほうが、毎回x座標とy座標を見つける必要がなくなります。 –

答えて

3

これを行う最も単純で(そして最もクリーンな)ソリューションの1つは、クラス内に行列をラップし、クラスのブラケット演算子を定義することです。ただし、通常は位置は0からn-1になり、1からnにはなりません。

コードは、Python 2とPython好奇心のうち3

class Matrix: 

    def __init__(self, matrix): 
     self.matrix = matrix 
     self.n = len(matrix) 

    def __getitem__(self, index): 
     index -= 1 
     return self.matrix[int(index%self.n)][int(index/self.n)] 

a = [[1,5,9,13], 
    [2,6,10,14], 
    [3,7,11,15], 
    [4,8,12,16]] 

mtx = Matrix(a) 
print([ mtx[i] for i in range(1,17) ]) 
# [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 
関連する問題