List indexing and slicing help you get parts or single items from a list easily. It is like picking fruits from a basket by their position.
List indexing and slicing in Python
Start learning this pattern below
Jump into concepts and practice - no test required
my_list = [10, 20, 30, 40, 50] # Indexing single_item = my_list[index] # Slicing sub_list = my_list[start:stop:step]
Indexing starts at 0 for the first item.
Slicing uses start (inclusive), stop (exclusive), and step (optional) to get parts of the list.
my_list = [10, 20, 30, 40, 50] print(my_list[0]) # First item print(my_list[-1]) # Last item
my_list = [10, 20, 30, 40, 50] print(my_list[1:4]) # Items from index 1 to 3 print(my_list[:3]) # First three items print(my_list[2:]) # From index 2 to end
my_list = [10, 20, 30, 40, 50] print(my_list[::2]) # Every other item print(my_list[::-1]) # Reverse the list
empty_list = [] print(empty_list[0:1]) # Slicing empty list returns [] single_item_list = [100] print(single_item_list[0]) # Indexing single item print(single_item_list[0:1]) # Slicing single item
This program shows how to use indexing and slicing on different lists: normal, single item, and empty. It prints the results clearly.
def print_list_info(my_list): print(f"Original list: {my_list}") if my_list: print(f"First item (index 0): {my_list[0]}") print(f"Last item (index -1): {my_list[-1]}") else: print("List is empty, no items to show.") print(f"Slice from index 1 to 3: {my_list[1:4]}") print(f"Slice first 3 items: {my_list[:3]}") print(f"Slice from index 2 to end: {my_list[2:]}") print(f"Every other item: {my_list[::2]}") print(f"Reversed list: {my_list[::-1]}") # Test with a normal list numbers = [10, 20, 30, 40, 50] print_list_info(numbers) print("\n") # Test with a single item list single_item_list = [100] print_list_info(single_item_list) print("\n") # Test with an empty list empty_list = [] print_list_info(empty_list)
Indexing and slicing are very fast operations with time complexity O(k), where k is the size of the slice.
Slicing creates a new list, so it uses extra space proportional to the slice size.
Common mistake: forgetting that the stop index in slicing is not included.
Use indexing to get single items, slicing to get parts or copies of lists.
Indexing gets one item by position, starting at 0.
Slicing gets a part of the list using start, stop, and step.
Negative indexes count from the end, and step can reverse or skip items.
Practice
my_list[2] return when my_list = [10, 20, 30, 40, 50]?Solution
Step 1: Understand list indexing
Indexing starts at 0, somy_list[0]is 10,my_list[1]is 20, andmy_list[2]is 30.Step 2: Identify the value at index 2
The value at index 2 is 30.Final Answer:
30 -> Option CQuick Check:
Index 2 value = 30 [OK]
- Starting count from 1 instead of 0
- Confusing index 2 with index 3
- Mixing up values and indexes
nums using indexing?Solution
Step 1: Recall negative indexing
Negative indexes count from the end, so-1means the last element.Step 2: Check each option
nums[-1] usesnums[-1], which correctly accesses the last element. nums[1] accesses the second element. nums[last] is invalid syntax. nums[len(nums)] causes an IndexError because list indexes go from 0 to len(nums)-1.Final Answer:
nums[-1] -> Option DQuick Check:
Last element index = -1 [OK]
- Using len(nums) as index (out of range)
- Trying to use 'last' as an index
- Confusing positive and negative indexes
letters = ['a', 'b', 'c', 'd', 'e'] print(letters[1:4])
Solution
Step 1: Understand slicing syntax
Slicingletters[1:4]means start at index 1 up to but not including index 4.Step 2: Identify elements at indexes 1, 2, 3
Index 1 is 'b', index 2 is 'c', index 3 is 'd'. So the slice is ['b', 'c', 'd'].Final Answer:
['b', 'c', 'd'] -> Option AQuick Check:
Slicing excludes stop index [OK]
- Including the stop index element
- Confusing start and stop indexes
- Using wrong indexes for slicing
nums = [1, 2, 3, 4, 5] print(nums[5])
Solution
Step 1: Check list length and valid indexes
Listnumshas 5 elements with indexes 0 to 4.Step 2: Understand index 5 usage
Index 5 is outside the valid range, so accessingnums[5]causes an IndexError.Final Answer:
IndexError because index 5 is out of range -> Option BQuick Check:
Index must be less than list length [OK]
- Thinking index 5 is valid for 5 elements
- Confusing SyntaxError with IndexError
- Assuming list indexes start at 1
data = [5, 10, 15, 20, 25, 30], which expression returns a new list with every second element in reverse order?Solution
Step 1: Understand slicing with step and negative step
The slicedata[::-2]starts from the end and takes every second element backwards.Step 2: Check what
It returns [30, 20, 10], which is every second element in reverse order.data[::-2]returnsStep 3: Verify other options
data[::2] returns every second element forward: [5, 15, 25]. data[-2::-1] returns from index -2 backwards: [25, 20, 15, 10, 5]. data[1::2] returns every second element starting at index 1: [10, 20, 30].Final Answer:
data[::-2] -> Option AQuick Check:
Negative step reverses and skips elements [OK]
- Using positive step for reverse
- Confusing start index with step sign
- Misunderstanding slice boundaries
