On 04/09/2014 01:24 PM, John Ladasky wrote:
I would like to build a multi-dimensional array that allows numpy-style indexing and, ideally, uses Python's familiar square-bracket and slice notations. For example, if I declare a two-dimensional array object, x, then x[4,7] retrieves the element located at the 4th row and the 7th column. If I ask for x[3:6,1:3], I get a 3 x 2 array object consisting of the inter- section of the 3rd-5th rows, and the 1st-2nd columns, of x. In this case I'm not allowed to use numpy, I have to restrict myself to the standard library. I thought that I might achieve the desired behavior by defining an object with specific __getitem__ and/or __getslice__ methods. However, the documentation of these methods that I am reading suggests that the arguments are pre-parsed into certain formats which may not allow me to do things numpy's way. Is this true?
Nope. Whatever you put between the square brackets is what gets passed into __getitem__; the only caveat is that anything with : will be turned into a slice:
Python 2.7.3 (default, Sep 26 2012, 21:51:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. --> class GetIndex(object): ... def __getitem__(self, thing): ... print thing ... return None ... --> test = GetIndex() --> test[1] 1 --> test [1,2] (1, 2) --> test[1:3, 4:5] (slice(1, 3, None), slice(4, 5, None)) --> test[range(3)] [0, 1, 2] -- ~Ethan~ -- https://mail.python.org/mailman/listinfo/python-list