Basic syntax
Slicing uses [start:stop:step]. The start is inclusive, stop is exclusive.
my_list = [0, 1, 2, 3, 4, 5]
# Get items from index 1 to 4 (exclusive):
print(my_list[1:4]) # [1, 2, 3]
# From start to index 3:
print(my_list[:3]) # [0, 1, 2]
# From index 2 to end:
print(my_list[2:]) # [2, 3, 4, 5]
# Copy entire list:
print(my_list[:]) # [0, 1, 2, 3, 4, 5]
Negative indices
my_list = [0, 1, 2, 3, 4, 5]
# Last 3 items:
print(my_list[-3:]) # [3, 4, 5]
# All except last 2:
print(my_list[:-2]) # [0, 1, 2, 3]
# From -4 to -1:
print(my_list[-4:-1]) # [2, 3, 4]
Step
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Every 2nd item:
print(my_list[::2]) # [0, 2, 4, 6, 8]
# Reverse:
print(my_list[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# Every 3rd item from index 1:
print(my_list[1::3]) # [1, 4, 7]
With strings
text = "Hello World"
print(text[0:5]) # "Hello"
print(text[6:]) # "World"
print(text[::-1]) # "dlroW olleH" (reversed)
Important notes
- Start is inclusive, stop is exclusive
- Negative indices count from the end
- Step can be negative for reverse
- Slicing creates a new object (doesn't modify original)