On 10/12/2010 9:52 AM, Antoon Pardon wrote:
On Fri, Oct 08, 2010 at 05:05:26PM -0400, Terry Reedy wrote:
But you really seem to be saying is "What if I sometimes want the
end points included and sometimes do not?" Slice syntax by itself
cannot handle all four cases, only one, one was chosen and that was
closed-open.
If you want flexibility, consider the following:
class my_list(list):
def __getitem__(self, key, include_start=True, include_stop=False):
Sorry, the above is a holdover from a previous, experimental version. In
this version, the extra parameters should be eliminated.
This should be just the expected
def __getitem__(self, key):
if (isinstance(key,tuple) and len(key)==2 and
isinstance(key[0], slice)
and isinstance(key[1],tuple) and len(key[1])==2):
key, (include_start, include_stop) = key
Here I unconditionally set the two include variables from the key.
The default values are ignored and are pure holdover noise.
start,stop,stride = key.indices(len(self))
if include_start == False:
start += 1
if include_stop == True:
stop += 1
key = slice(start,stop,stride)
print(key)
return list.__getitem__(self, key)
ll = my_list(range(10))
That seems to be an undocumented feature. I didn't know it was possible
to use extra parameters after key in __getitem__.
They never get passed, and as I said above, should not have been there
in the version I posted. Sorry for the noise. The actual point is that
keys can be tuples and tuples can contain a slice and other info.
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list