practising some python, which is a pretty easy language to grab up.
I have
>>> L = [1,2,3,4]
>>> L[1:1] = [1,2,3]
>>> L
[1
Slicing behaves differently depending on whether it's on the left- or right-hand side of an expression. When it's on the left side, it doesn't return a list - instead, it behaves as a slice object, which knows more about slices and has assignment specifically overridden to operate as insertion.
L[1:1]
means the slice of the list L
starting at index 1 (the second element), up to but not including index 1. So it is an empty list. On the right-hand side of an assignment, it is simply an anonymous empty list. But on the left-hand side, the assignment knows where the slice has been made, and can splice in the new list value into the proper place.
The official Python Tutorial explains it best, in my opinion. The end of Chapter 3.1.2 has the following diagram:
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
What this illustrates is that you can think of the indices as pointing BETWEEN the elements. So in this illustration, if specifying a slice [1:1]
, you are actually referring to the space between H
and e
, but not including them.
If you wanted to overwrite H
and e
, you would specify the slice [0:2]
.