On Mon, Apr 8, 2013 at 8:07 PM, <bhk...@gmail.com> wrote: > I am trying to create 2D arrays without using advanced features like > numpy, for this I have created 2 separate modules arrays.py and array2D.py. > Here's the code for that: > > arrays.py module: > ================== > import ctypes > > class Array: > > #Creates an array with size elements. > def __init__( self, size ): > assert size > 0, "Array size must be > 0" > self._size = size > print "sixe is %s" %self._size > > # Create the array structure using the ctypes module. > PyArrayType = ctypes.c_int * size > self._elements = PyArrayType() > print "type is e", type(self._elements) > #self._elements = ctypes.c_int * size > > print "Elements are self.element %s" % self._elements > # Initialize each element. > #for i in range(self._size): > # self.clear( i ) > > > # Returns the size of the array. > def __len__( self ): > return self._size > > # Gets the contents of the index element. > def __getitem__( self, index ): > assert index >= 0 and index < len(self), "Array subscript out of > range" > return self._elements[ index ] > > # Puts the value in the array element at index position. > def __setitem__( self, index, value ): > assert index >= 0 and index < len(self), "Array subscript out of > range" > print "Type is ", type(index) > self._elements[ index ] = value > > # Clears the array by setting each element to the given value. > def clear( self, value ): > for i in range( len(self) ) : > self._elements[i] = value > > # Printing the arrays: > def __str__(self): > return self._elements > > > > array2D.py module > ================== > > > import arrays > > class Array2D : > # Creates a 2-D array of size numRows x numCols. > def __init__( self, numRows, numCols ): > # Create a 1-D array to store an array reference for each row. > > self._theRows = arrays.Array( numRows ) > # Create the 1-D arrays for each row of the 2-D array. > print "Num of Cloumns is", numCols > > for i in range( numRows ) : > self._theRows[i] = arrays.Array( numCols ) > > # Returns the number of rows in the 2-D array. > def numRows( self ): > return len( self._theRows ) > > # Returns the number of columns in the 2-D array. > def numCols( self ): > return len( self._theRows[0] ) > > # Clears the array by setting every element to the given value. > def clear( self, value ): > for row in range( self.numRows() ): > row.clear( value ) > > # Gets the contents of the element at position [i, j] > 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] > > # Sets the contents of the element at position [i,j] to value. > def __setitem__( self, ndxTuple, value ): > #assert len(ndxTuple) == 3, "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 > > > arr = Array2D(2,4) > > print "arr is %s" %arr > > > Traceback is : > > sixe is 2 > type is e <class 'arrays.c_long_Array_2'> > Elements are self.element <arrays.c_long_Array_2 object at 0x00AA7F80> > Cols in 4 > Num of Cloumns is 4 > !!!!!!!!!!!!!! i is 0 > sixe is 4 > type is e <class 'arrays.c_long_Array_4'> > Elements are self.element <arrays.c_long_Array_4 object at 0x00B60210> > Type is <type 'int'> > Traceback (most recent call last): > File "C:\Python27\Lib\array2D.py", line 53, in <module> > arr = Array2D(2,4) > File "C:\Python27\Lib\array2D.py", line 16, in __init__ > self._theRows[i] = arrays.Array( numCols ) > File "C:\Python27\Lib\arrays.py", line 36, in __setitem__ > self._elements[ index ] = value > AttributeError: Array instance has no attribute '__trunc__' > -- > http://mail.python.org/mailman/listinfo/python-list >
Not sure about the __trunc__ problem but i can suggest this alternative which is a bit simpler def array2D(x, y, val=None): return [[val for col in xrange(x)] for row in xrange(y)] -- "The UNIX system has a command, nice ... in order to be nice to the other users. Nobody ever uses it." - Andrew S. Tanenbaum
-- http://mail.python.org/mailman/listinfo/python-list