This question already has an answer here:
- Understanding slice notation 31 answers
I'm a bit confused about slicing a list and the numbering here.
Python tends to start from 0 instead of 1, and it's shown below to work in that way well enough. But if we're starting from 0, and going until 3, why am I not getting exam
instead of exa
? After all, 0 - 3 is 4 numbers.
>>> test = "example string"
>>> print test[:3]
exa
>>> print test[0:3]
exa
>>> print test[1:3]
xa
If you have
it will return elements from
0
to3 - 1
.not
In general, it will return values from
start
toend - 1
. For further information, you could read this.This is an intentional way, last element is exclusive.
Why is it so?
Firstly, my understanding it is because
test[0:len(test)]
should print all the list and thentest[0:len(test)-1]
excludes one element. This is prettier and more readable than if the last element would be included.Secondly, it is because if you have
test[:-1]
it will return all the elements, but the last, which is very intuitive. If it would include the second index, to cut the last element you'd have to dotest[:-2]
which is ugly and makes it harder to read...Also, length of your resulting list is
end - start
, which is yet another convenient feature about it.