Create an object from 2D array class in python
目前我有一个使用python的数据结构课程。在书中,它们包含了两个不同的类来实现一维数组结构和二维数组。
一维数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import ctypes class Array: def __init__(self, size): assert size > 0,"Array size must be > 0" self._size = size PyArrayType = ctypes.py_object * size self._elements = PyArrayType() self.clear(None) def len(self): return self._size def getitem(self, index): assert index >= 0 and index < self.len(),"Array subscript out of range" return self._elements[index] def setitem(self, index, value): assert 0 <= index < self.len(),"Array subscript out of range" self._elements[index] = value def clear(self, value): for i in range(self.len()): self._elements[i] = value def iter(self): return ArrayIterator(self._elements ) class ArrayIterator: def __init__(self, theArray): self._arrayRef = theArray self._curNdx = 0 def __iter__(self): return self def __next__(self): if self._curNdx < len(self._arrayRef): entry = self._arrayRef[self._curNdx] self._curNdx += 1 return entry else: raise StopIteration class Array2D : def __init__( self, numRows, numCols ): self._theRows = Array( numRows ) for i in range( numRows ) : self._theRows[i] = Array( numCols ) def numRows( self ): return len( self._theRows ) def numCols( self ): return len( self._theRows[0] ) def clear( self, value ): for row in range( self.numRows() ): row.clear( value ) def __getitem__( self, ndxTuple ): assert len(ndxTuple) == 2,"Invalid number of array subscripts." row = ndxTuple[0] col = ndxTuple[1] assert row >= 0 and row < self.numRows() \ and col >= 0 and col < self.numCols(), \ "Array subscript out of range." the1dArray = self._theRows[row] return the1dArray[col] def __setitem__( self, ndxTuple, value ): assert len(ndxTuple) == 2,"Invalid number of array subscripts." row = ndxTuple[0] col = ndxTuple[1] assert row >= 0 and row < self.numRows() \ and col >= 0 and col < self.numCols(), \ "Array subscript out of range." the1dArray = self._theRows[row] the1dArray[col] = value |
我使用以下代码来理解它的工作原理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | arr = Array(5) arrLen = arr.len() arr.clear(0) for i in range (arrLen): print arr.getitem(i) print"The length of the array =",arrLen print"Enter 5 numbers" for i in range (arrLen): #n = raw_input("num =") arr.setitem(i,i) for i in range (arrLen): print arr.getitem(i) print"values are", arr.iter() |
但是,我不知道如何调用二维数组来理解它是如何工作的。
1 | ArrMulti = Array2D(3, 4) |
我得到了以下错误:
1 2 3 | File"MultiArrayADT.py", line 46, in __init__ self._theRows[i] = Array( numCols ) AttributeError: Array instance has no attribute '__setitem__' |
所以请有人告诉我如何创建一个二维数组对象。
在您的