get sub list: slice a list. reading the list from left to right, the first slice index specifies the first element you want,
and the second slice index specifies the first element you don't want.
li[1:3] get all the elements of the list, in order, starting with the first slice index (in this case li[1]), up to but not including the second slice index (in this case li[3]).
li[1:-1] one or both of the slice indices is negative. The return value is everything in between.
li[:3] the left slice index is 0, you can leave it out, and 0 is implied=li[0:3]
li[3:] the right slice index is the length of the list and can be ignored. li[:n] will always return the first n elements, and li[n:] will return the rest, regardless of the length of the list.
li[:] all elements of the list are included. But this is not the same as the original li list; it is a new list that happens to have all the same elements.