wap26 wap26 - 1 month ago 9
Python Question

Why are slice and range upper-bound exclusive?

Disclaimer: I am not asking if the upper-bound

stop
argument of
slice()
and
range()
is exclusive or how to use these functions.

Calls to the
range
and
slice
functions, as well as the slice notation
[start:stop]
all refer to sets of integers.

range([start], stop[, step])
slice([start], stop[, step])


In all these, the
stop
integer is excluded.

I am wondering why the language is designed this way.

Is it to make
stop
equal to the number of elements in the represented integer set when
start
equals 0 or is omitted?

Is it to have:

for i in range(start, stop):


look like the following C code?

for (i = start ; i < stop; i++) {

Answer

The documentation implies this has a few useful properties:

word[:2]    # The first two characters
word[2:]    # Everything except the first two characters

Here’s a useful invariant of slice operations: s[:i] + s[i:] equals s.

For non-negative indices, the length of a slice is the difference of the indices, if both are within bounds. For example, the length of word[1:3] is 2.

I think we can assume that the range functions act the same for consistency.

Comments