On 10/8/2010 4:21 AM, Antoon Pardon wrote:
On Wed, Oct 06, 2010 at 05:28:13PM -0400, Terry Reedy wrote:

Strings and tuples are not natural numbers, but do have least
members ('' and ()), so the bottom end had better be closed.

Why?

Because otherwise one can never include the least member in a slice.

> The fact that we have a bottom element in the item space,
doesn't imply that the sequence I need is easiest defined by
using an inclusive lower limit. What if I wanted all none-empty
strings/tuples keys in the tree?

Use 'a' as the lower bound, it being the string that follows ''.

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):
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
            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))

print('standard:', ll[2], ll[1:3], ll[1:3,(True,False)])
print('delete start:', ll[1:3,(False,False)])
print('shift:', ll[1:3,(False,True)])
print('extend stop:', ll[1:3,(True,True)])

>>>
slice(1, 3, 1)
standard: 2 [1, 2] [1, 2]
slice(2, 3, 1)
delete start: [2]
slice(2, 4, 1)
shift: [2, 3]
slice(1, 4, 1)
extend stop: [1, 2, 3]
>>>

Modify to taste ;-)

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to