DEV Community

Ridwan Ahmed Arman
Ridwan Ahmed Arman

Posted on

Revise Python in 15 days for ML (2025) : Day 5 (List)

Welcome to Day 5 of our Python journey! If you missed Day 4 where we explored loops, be sure to check it out before diving into today's content!

πŸ”‘ Introduction to Data Structures

Today we start our exploration of Python's data structures, beginning with one of the most versatile and commonly used: Lists!

Data structures are like specialized containers that organize and store data in ways that make it easy to access and modify. Think of them as different types of toolboxes, each designed for specific kinds of jobs.

πŸ“š Lists: Python's Swiss Army Knife

A list is a collection of items stored in a specific order. Lists are incredibly versatile and are one of the most frequently used data structures in Python.

✨ Key Characteristics of Lists

Lists have three fundamental properties that make them special:

  1. πŸ”’ Ordered: Items maintain their position - the 1st item stays 1st unless you change it
  2. πŸ”„ Mutable: You can change, add, or remove items after creating the list
  3. πŸ” Allow Duplicates: The same value can appear multiple times in a list

πŸ’‘ Remember: Order matters in lists! The sequence of elements is preserved.

πŸ› οΈ Creating and Accessing Lists

Basic Syntax

list_name = [item1, item2, item3, item4]

# Example
list_1 = [1, 2, 3, 4, 5]
print(list_1[0])  # Output: 1
Enter fullscreen mode Exit fullscreen mode

πŸ” How Indexing Works

  • Lists use zero-based indexing - the first element is at position 0
  • You access elements using square brackets []
  • Negative indices count from the end: list_1[-1] gets the last element

🧰 Essential List Operations

Adding Elements

There are multiple ways to add elements to a list:

# Create an empty list and add elements
list_2 = []
for i in range(5):
    list_2.append(int(input()))  # Adds user input to the end of the list
print(list_2)
Enter fullscreen mode Exit fullscreen mode

Removing Elements

list_1 = [1, 2, 3, 4, 5]
list_1.pop()  # Removes the last element
print(list_1)  # Output: [1, 2, 3, 4]
Enter fullscreen mode Exit fullscreen mode

πŸ”§ List Methods: Your Toolkit for Manipulation

Python lists come with many built-in methods that make working with them a breeze:

Method Description Example
count() Counts occurrences of an element list_3.count(3)
index() Returns position of first occurrence list_3.index(3)
reverse() Reverses the list in-place list_3.reverse()
sort() Sorts the list in-place list_3.sort()
extend() Adds elements from another iterable list_3.extend([6,7,8])
insert() Inserts element at specific position list_3.insert(2,9)
remove() Removes first occurrence of value list_3.remove(9)
append() Adds element to end of list list_3.append(9)
pop() Removes element at position (default last) list_3.pop()
clear() Removes all elements list_3.clear()

Let's see these methods in action:

list_3 = [1, 2, 3, 4, 5]

# Finding information
print(list_3.count(3))    # Output: 1 (count of element 3)
print(list_3.index(3))    # Output: 2 (position of element 3)
print(list_3[-1])         # Output: 5 (last element)

# Changing order
list_3.reverse()
print("After reverse", list_3)  # Output: After reverse [5, 4, 3, 2, 1]

list_3.sort() 
print("After sort", list_3)     # Output: After sort [1, 2, 3, 4, 5]

# Adding elements
list_3.extend([6, 7, 8])
print("After extend", list_3)   # Output: After extend [1, 2, 3, 4, 5, 6, 7, 8]

list_3.insert(2, 9)
print("After insert", list_3)   # Output: After insert [1, 2, 9, 3, 4, 5, 6, 7, 8]

# Removing elements
list_3.remove(9)
print("After remove", list_3)   # Output: After remove [1, 2, 3, 4, 5, 6, 7, 8]

list_3.append(9)
print(list_3)                   # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

list_3.pop()
print(list_3)                   # Output: [1, 2, 3, 4, 5, 6, 7, 8]

list_3.clear()
print(list_3)                   # Output: []
Enter fullscreen mode Exit fullscreen mode

πŸ“ Copying Lists: A Critical Distinction

There are two ways to copy a list, but they behave very differently:

Method 1: Using the copy() method

list_4 = [1, 2, 3, 4, 5]
list_5 = list_4.copy()
print(list_5)  # Output: [1, 2, 3, 4, 5]
Enter fullscreen mode Exit fullscreen mode

Method 2: Using assignment (=)

list_1 = [1, 'hello', 3, 4, 5]
list_2 = list_1            # Creates a reference, not a new list
list_3 = list_1.copy()     # Creates a new independent list
Enter fullscreen mode Exit fullscreen mode

⚠️ The Crucial Difference

Watch what happens when we modify the original list:

list_1[0] = 10             # Changed value in list_1
print(list_2)              # Output: [10, 'hello', 3, 4, 5] - list_2 changed!
print(list_3)              # Output: [1, 'hello', 3, 4, 5] - list_3 remains unchanged
Enter fullscreen mode Exit fullscreen mode

πŸ” What's happening? When you use =, you're creating a reference to the same list in memory. When you use copy(), you're creating a brand new list with the same values.

🧩 Append vs. Extend: Another Important Distinction

These two methods might seem similar, but they behave quite differently:

# Using append with a list
list_1 = [1, 2, 3, 4, 5]
list_2 = [6, 7, 8]
list_1.append(list_2)
print(list_1)  # Output: [1, 2, 3, 4, 5, [6, 7, 8]]

# Using extend with a list
list_3 = [1, 2, 3, 4, 5]
list_4 = [6, 7, 8]
list_3.extend(list_4)
print(list_3)  # Output: [1, 2, 3, 4, 5, 6, 7, 8]
Enter fullscreen mode Exit fullscreen mode

πŸ’‘ Key difference:

  • append() adds the entire object as a single element
  • extend() adds each element of the iterable individually

✨ List Comprehensions: The Pythonic Superpower

List comprehensions are a concise way to create lists. They're one of Python's most powerful features and can often replace loops for list creation.

Basic Syntax:

list_name = [expression for item in iterable if condition]
Enter fullscreen mode Exit fullscreen mode

Simple Example:

# Creating a list of squares from 0 to 9
squares = [x**2 for x in range(10)]
print(squares)  
# Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Enter fullscreen mode Exit fullscreen mode

🌟 Advanced Example: Creating a Matrix

# Creating a 5Γ—3 matrix using nested list comprehension
matrix = [[i for i in range(3)] for j in range(5)]
print(matrix)
# Output: [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
Enter fullscreen mode Exit fullscreen mode

πŸ“Š When to Use Lists?

Lists are perfect when you need:

  • Ordered collection of items
  • Flexible modification - adding, removing, or changing elements
  • Sequence operations like slicing, concatenation, etc.
  • Mixed data types in one collection

🧠 List Performance Considerations

Understanding list performance helps you use them more effectively:

  • Accessing elements by index: O(1) - Lightning fast!
  • Searching (without knowing the index): O(n) - Must check each element
  • Insertion/deletion at beginning/middle: O(n) - Must shift elements
  • Insertion/deletion at end: O(1) - Very fast when using append()/pop()

πŸ’ͺ Practice Exercises

Try these exercises to strengthen your understanding:

  1. Create a list of the first 10 prime numbers using a loop
  2. Write a function that takes two lists and returns a new list with common elements
  3. Use list comprehension to create a list of all even numbers between 1 and 50
  4. Create a function that flattens a nested list (hint: use extend)

πŸ” Common Mistakes to Avoid

  • Forgetting that lists start at index 0, not 1
  • Using = instead of copy() when you need an independent copy
  • Confusing append() and extend() when adding elements
  • Modifying a list while iterating through it (can cause unexpected behavior)

πŸš€ Tomorrow: Tuples

Tomorrow we'll explore tuples - Python's immutable, ordered sequences. We'll see how they differ from lists and when to use each one.

πŸ”— Resources


← Day 4: Mastering Loops | Day 5: Python Lists | [Day 6: Tuples β†’]


What's your favorite list method? Share in the comments below! πŸ’¬

Top comments (0)