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)