[Python-ideas] More useful slices

Steven D'Aprano steve at pearwood.info
Sun Feb 1 18:27:12 CET 2015


On Sun, Feb 01, 2015 at 04:13:32PM +0100, Todd wrote:
> Although slices and ranges are used for different things and implemented
> differently, conceptually they are similar: they define an integer sequence
> with a start, stop, and step size.

I'm afraid that you are mistaken. Slices do not necessarily define 
integer sequences. They are completely arbitrary, and it is up to the 
object being sliced to interpret what is or isn't valid and what the 
slice means.

py> class K(object):
...     def __getitem__(self, i):
...             print(i)
...
py> K()["abc":(2,3,4):{}]
slice('abc', (2, 3, 4), {})


In addition, the "stop" argument to a slice may be unspecified until 
it it applied to a specific sequence, while range always requires 
stop to be defined.

py> s = slice(1, None, 2)
py> "abcde"[s]
'bd'
py> "abcdefghi"[s]
'bdfh'

It isn't meaningful to define a range with an unspecified stop, but it 
is meaningful to do so for slices.


In other words, the similarity between slices and ranges is not as close 
as you think.


-- 
Steven


More information about the Python-ideas mailing list