Python List Slice Tutorial

In this section we will learn how to slice a List in Python.

What is Python List Slice?

The Python List Slice is a way of taking a range of elements from a list and create a new list as a result. Also using slice, we can remove or replace part of elements in a list with new elements.

Python List Slice Syntax:

listName[start: stop]
listName[start: stop: step]
`listName`: this is the name of the list we want to run slice operation on it.

start: this is an index number where we want to specify where the slicing should start. This value is optional and if ignored, the default value which is 0 (the first element of the list) will be used.

stop: this is the index number where we want to stop the slicing. Note that this value is excluded! Meaning if for example we set the value 4, the sub-list would contain the elements up to the index number 3! Also this value is optional and if ignored, the size of the target list will be used.

step: this value defines the steps between the start and stop index. For example, if the value is 2, that means start from the start index and then skip one element at a time and add the next one as part of the sub-list. This value is optional and if ignored, the value +1 will be used.

Example: using python list slice

list1 = [1,2,3,4,5,6,7,8,9,10]
subList = list1[2:8:2]
subList2 = list1[3:7]
print(subList)
print(subList2)
Output:
[3, 5, 7]
[4, 5, 6, 7]

Negative Indexing in Python

Other than using positive values in a slice, we can use negative numbers as well! In this case, negative numbers mean start from the last elements and move towards the beginning of the list.

Note: the last element of a list has the index number -1, the element before the last element of a list has the index number -2 and so on.

Also the step can be set to a negative value as well! One good example of using negative value for the step is for when we want to get the elements of a list in a reverse mode! Basically, if we set the value of step to -1 for example, that means we want to reverse the order and move back from the start index towards stop index. Note that in situation like this, the value of the start index should be greater than the value of the stop index (if the values are positive numbers of course). This is because we’re moving backward from the end of a list (which obviously has a higher index number) towards the beginning (which has lower index number)!

Example: negative index number for step in slice

list1 = [1,2,3,4,5,6,7,8,9,10]
subList = list1[5:0:-1]
print(subList)
Output:
[6, 5, 4, 3, 2]

In this example the value of the step is set to -1. That means moving backward. Here the value of the start index is set to 5 which means the starting position is the index number 5 and from there we want to move back towards the beginning of the list. Also the value of the stop index is set to 0 which means the index number where the sub-list should stop is at this index.

Example: python list slice and negative index numbers

list1 = [1,2,3,4,5,6,7,8,9,10]
subList = list1[-4:-1]
print(subList)
Output:
[7, 8, 9]

Note that the value of the start index is less than the value of the stop index. This is because the value of the step is set to its default which is +1 and that means the sub-list is taken from the left side of the list towards the right side (end side).

Python List Slice: leaving out the first index

As mentioned at the beginning of this section, the first index of the slice is optional and if ignored, the default value which is 0 will be used instead.

Example: list slice without the first index

list1 = [1,2,3,4,5,6,7,8,9,10]
subList = list1[:6]
print(subList)
Output:
[1, 2, 3, 4, 5, 6]

Python List Slice: leaving out the last index

As mentioned at the beginning of this section, the stop index of the slice is optional and if ignored, the default value which is the size of the target list will be used instead.

Example: list slice without the last index

list1 = [1,2,3,4,5,6,7,8,9,10]
subList = list1[3:]
print(subList)
Output:
[4, 5, 6, 7, 8, 9, 10]

Python List Slice: removing elements from a list

So far we’ve seen how to get a sub-list from a list object. But using slice we can remove one or more elements from a list object as well.

To do this we need to invoke the slicing on the left side of the assignment operator and then put an empty list on the right side of the assignment operator.

Example: removing elements from a list using slice

list1 = [1,2,3,4,5,6,7,8,9,10]
list1[0:1] = []
print(list1)
Output:
[2, 3, 4, 5, 6, 7, 8, 9, 10]

Here the slice just contains one element and that is the element in the index 0 of the list. As you can see on the right side of the assignment operator there’s just one empty list and as a result, the first element of this list is now removed.

Now let’s remove multiple elements of a list.

Example: removing multiple elements from a list using slicing

list1 = [1,2,3,4,5,6,7,8,9,10]
list1[1:6] = []
print(list1)
Output:
[1, 7, 8, 9, 10]

Python List Slice: adding elements to a list

Using slice, we can add multiple elements to a list as well!

To do this, we need to put the index number for the start and stop exactly the same. For example, if we want to add 3 elements to a list at the index number 4, then the value of the start and stop index should be set to 4.

Example: adding elements to a list using slice

list1 = [1,2,3,4,5,6,7,8,9,10]
list1[1:1] = ["Jack","John","Omid"]
print(list1)
Output:
[1, 'Jack', 'John', 'Omid', 2, 3, 4, 5, 6, 7, 8, 9, 10]

Note that the three new elements are added to the list starting at the index number 1. Also no old element from the list is removed this way.

Python List Slice: replacing and adding new elements to a list

Using slice, we can replace old elements of a list with new elements as well!

To do this, we first declare a slice on the left side of the assignment operator and then put new elements as a list on the right side of the assignment operator.

Now here’s the situation:

If the declared slice on the left side of the assignment operator has more elements than the elements of the list on the right side of the assignment operator, then the rest of elements declared in the slice will be removed!

On the other hand, if the number of elements in the slice is less than the number of elements declared in the list on the right side of the assignment operator, then the remaining elements of the list will be “added” to the target list without replacing any old element.

Example: replacing and adding new elements to a list

list1 = [1,2,3,4,5,6,7,8,9,10]
list2 = [10,11,12,13,14,15,16,17,18,19,20]
list1[0:6] = ["Jack","John","Omid"]
print(list1)
list2[0:3] = ["John","Jack","Omid","Ellen","Elon","Ian","Jame","Richard"]
print(list2)
Output:
['Jack', 'John', 'Omid', 7, 8, 9, 10]
['John', 'Jack', 'Omid', 'Ellen', 'Elon', 'Ian', 'Jame', 'Richard', 13, 14, 15, 16, 17, 18, 19, 20]