Slicing in Python is a powerful feature that allows easy extraction and modification of parts of sequences. For example extraction of sublists from another list or last N characters from a string.
Slicing in Python, refers to the process of extracting a specific portion of a sequence, such as:
Slicing can be done using the slice notation, which usually consists of two indices separated by a colon -
:. You can find more about the slicing syntax in the next section.
The slice notation
[start:end:step] is used to extract a portion of a sequence, where:
- the start index is the first element you want to include
- the end index is the first element you want to exclude
- the step is the number of elements to skip between each item in the slice
Start and end indices are optional. The same is for the step.
In the case of
- the start and end indices are not specified, meaning they take the default values of 0 and -1 or
- the step is -1, so it will take every element in the sequence in reverse order
Indexing and slicing
Indexing and slicing are ways to access specific elements or portions of a sequence.
Indexing is used to access a single element of a sequence by its position, or index. The index of the:
- first element is 0
- the second element is 1 and so on.
- the last element can be accessed by -1 or
To access an element at a specific index, you can use the square brackets notation, like this:
letters = ['a', 'b', 'c', 'd', 'e'] print(letters)
Slicing is used to access a range of elements from a sequence:
letters = ['a', 'b', 'c', 'd', 'e'] letters[1:3] letters[::2]
['b', 'c'] ['a', 'c', 'e']
We can also use negative indexes in slicing, which starts counting from the end of the sequence. For example :
letters = ['a', 'b', 'c', 'd', 'e'] letters[-3:-1]
What is [::1] in Python?
[::-1] is used to extract every element from a sequence, in the same or reverse order.
[::1] is equivalent to slicing with just one colon -
slicing with positive step
Slicing with a positive step is done from left to right. By default step is 1:
letters = ['a', 'b', 'c', 'd', 'e'] print(letters[::1])
['a', 'b', 'c', 'd', 'e']
reverse order slicing
Negative step change the order of slicing from right to left:
letters = ['a', 'b', 'c', 'd', 'e'] print(letters[::-1])
['e', 'd', 'c', 'b', 'a']
Next we will cover several examples for slicing in Python.
Extracting a specific range of elements from a Python list:
numbers = ['a', 'b', 'c', 'd', 'e'] print(numbers[2:4])
Extracted sublist is:
Modify list with slicing
We can even modify Python list by using slicing:
letters = ['a', 'b', 'c', 'd', 'e'] letters[1:3] = ['x', 'y'] print(letters)
The result is a list with changed elements:
['a', 'x', 'y', 'd', 'e']
Extracting a specific range of characters from a string or getting a substring:
text = "Indexing and slicing" print(text[4:10])
We get this substring by slicing:
Python slice array
To extract a specific range of rows and columns from a 2D array we can use slicing. Let's have the following array in Python:
import numpy as np matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) print(matrix)
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
we can use slicing to extract subarray:
which results into:
[[2 3] [5 6]]
Extracting the elements of a tuple:
letters = ('a', 'b', 'c', 'd', 'e') print(letters[-2:])
extracting last two elements of a tuple:
Slice every n-th element
We can use slicing to extract every n-th element from a sequence. For example extracting every second element:
letters = ['a', 'b', 'c', 'd', 'e'] letters[::2]
['a', 'c', 'e']
Slicing in Pandas
Slicing is used in many libraries like numpy, pandas, etc.
Slicing in Pandas is similar to Python slicing for sequences, but it is applied to DataFrame and Series.
Pandas offers a variety of ways to slice and index data, including:
- label-based indexing using the
- select data by the label of the rows and columns
- position-based indexing using the
- select data by the integer position of the rows and columns
- Boolean indexing
- select data based on a boolean condition.
Examples of slicing in Pandas:
select all rows and columns 'A' to 'C'
df.loc[:, 'A':'C'] df.iloc[3:5, 0:2] # select rows 3 to 4 and columns 0 to 1
select rows 0 to 2 and columns 1 to 3