2011-07-13 15 views
1

私はPythonで動的な2次元配列を定義します。Pythonで動的な2次元配列を定義する方法は?

プログラムの開始時に2次元配列の行数がわかりません。必要に応じてこの2D配列に新しい行を定義したいと思います。このコードなどの

array = [][100] 
array[0][] = new array() 
array[0][2] = 'hello' 

array[1][] = new array() 
array[1][3]= 'hello' 
+0

Pythonには実際の2次元配列はありませんが、リストのリストを持つことができます。あらかじめサイズを指定する必要はありません。あるいは、あなたは本当に[Python配列](http://docs.python.org/library/array.html)について話していますか? –

+0

はい、Python配列を定義したいと思います。あらかじめサイズを指定してリストのリストを定義する方法を教えてください。おかげ –

+0

私はこれをしたい: >>>マット= [] [] >>>マット[0] = [ 'ROW1'、 'ROW1'、 '行1'] >>>マット[1 ] = [ 'ROW2'、 'ROW2'] >>>マット[2] = [ 'ROW3'] このような値を与える: >>>印刷マット[1] [1] ROW2 –

答えて

5

あなたは次のような意味ですか?

class DynamicList(list): 

    def __getslice__(self, i, j): 
     return self.__getitem__(slice(i, j)) 
    def __setslice__(self, i, j, seq): 
     return self.__setitem__(slice(i, j), seq) 
    def __delslice__(self, i, j): 
     return self.__delitem__(slice(i, j)) 

    def _resize(self, index): 
     n = len(self) 
     if isinstance(index, slice): 
      m = max(abs(index.start), abs(index.stop)) 
     else: 
      m = index + 1 
     if m > n: 
      self.extend([self.__class__() for i in range(m - n)]) 

    def __getitem__(self, index): 
     self._resize(index) 
     return list.__getitem__(self, index) 

    def __setitem__(self, index, item): 
     self._resize(index) 
     if isinstance(item, list): 
      item = self.__class__(item) 
     list.__setitem__(self, index, item) 

>>> mat = DynamicList() 
>>> mat[0] = ['row1','row1','row1'] 
>>> mat[1] = ['row2','row2'] 
>>> mat[2]= ['row3'] 
>>> mat 
[['row1', 'row1', 'row1'], ['row2', 'row2'], ['row3']] 
>>> print mat[1][1] 
row2 
>>> mat[5][5] = 'row5' 
>>> mat 
[['row1', 'row1', 'row1'], ['row2', 'row2'], ['row3'], [], [], [[], [], [], [], 
[], 'row5']] 
>>> print mat[5] 
[[], [], [], [], [], 'row5'] 
>>> print mat[5][5] 
row5 
4

どのようにnumpyののmatrix classを使用してはどうですか?

関連する問題