Lists & Tuples

When you need to store multiple related pieces of data in a single variable, Python offers powerful sequence types. Lists and tuples are two of the most fundamental, allowing you to maintain order and access elements by their position. Understanding their differences—especially mutability—is key to writing efficient and predictable Python code. These structures are the backbone for handling collections of items, from database query results to user input.

Understanding Python Lists

A list in Python is an ordered, mutable collection of items. This means elements are stored in a specific sequence, and you can change, add, or remove items after the list has been created. Lists are incredibly versatile, capable of holding items of different data types within the same collection. They are defined by enclosing a comma-separated sequence of items within square brackets [].

pythonCreating and Inspecting Lists

Accessing List Elements: Indexing

Each item in a list has an associated index, starting from 0 for the first element. You can access individual elements using these indices within square brackets. Python also supports negative indexing, where -1 refers to the last item, -2 to the second to last, and so on. This provides a convenient way to access elements from the end of the list without knowing its exact length.

pythonRetrieving Items by Index

Extracting Sub-Lists: Slicing

Slicing allows you to extract a portion of a list, creating a new list without modifying the original. The syntax is [start:stop:step], where start is the inclusive beginning index, stop is the exclusive ending index, and step determines the increment. Omitting start defaults to the beginning, omitting stop defaults to the end, and omitting step defaults to 1. This powerful feature is essential for working with subsets of data.

pythonSlicing a List of Transaction IDs
Check Your Understanding
If my_list = [10, 20, 30, 40, 50], what does my_list[1:4] return?

Mutability: Modifying Lists In-Place

A defining characteristic of lists is their mutability, meaning you can change their contents after creation. You can assign new values to specific indices, add new elements, or remove existing ones. This in-place modification is a powerful feature, but it also means that if multiple variables refer to the same list object, changes made through one variable will be reflected in all of them. This behavior is crucial to understand to avoid unexpected side effects.

pythonModifying List Elements and Structure
✨ In-Place vs. New Object

Many list methods (like append(), sort(), reverse()) modify the list in-place and return None. Functions like sorted() or slicing [:] return a new list and leave the original unchanged. Be mindful of this distinction to avoid unexpected behavior.

Try It Yourself
Given a list of daily temperatures, add a new temperature to the end, then remove the lowest temperature if it's below 0°C. Finally, sort the list in ascending order.
python

List Comprehensions: Concise List Creation

List comprehensions offer a concise and readable way to create lists based on existing iterables. They combine the loop and the conditional logic into a single line, often making code more efficient and elegant than traditional for loops. This syntax is widely used in Python for transforming data and filtering elements, making it a crucial tool for data manipulation.

pythonGenerating a List of Squared Numbers and Filtering

Introducing Python Tuples

A tuple is an ordered, immutable collection of items. Unlike lists, once a tuple is created, you cannot change its elements, add new ones, or remove existing ones. This immutability makes tuples suitable for data that should not change, such as coordinates, database records, or function arguments. Tuples are defined by enclosing a comma-separated sequence of items within parentheses ().

pythonCreating and Accessing Tuples
⚠️ Tuple Immutability in Practice

Attempting to modify a tuple element (e.g., my_tuple[0] = 'new_value') will raise a TypeError. While the tuple itself is immutable, if it contains mutable objects (like lists), those nested mutable objects can still be changed. For example, my_tuple = (1, [2, 3]); my_tuple[1].append(4) is valid, but my_tuple[1] = [5, 6] is not.

Check Your Understanding
Which operation is NOT valid for a Python tuple?

When to Choose Tuples

Tuples are often preferred over lists in specific scenarios where immutability is an advantage. They are ideal for representing fixed collections of related items, such as the (latitude, longitude) of a point, or the (name, age, ID) of a user record. Because they are immutable, tuples can also be used as keys in dictionaries, unlike lists. Furthermore, functions often return tuples when they need to send back multiple values, ensuring the integrity of the returned data.

Common Sequence Operations

Both lists and tuples are sequences, meaning they share many common operations. You can find their length, check for element membership, concatenate them, and repeat their contents. These operations provide a consistent interface for working with ordered collections, regardless of whether they are mutable or immutable. Understanding these shared behaviors simplifies data manipulation across different sequence types.

pythonApplying Common Sequence Operations

Lists vs. Tuples: A Comparison

The choice between a list and a tuple often comes down to whether the collection of items needs to change after creation. Lists are the go-to for dynamic collections where elements will be added, removed, or reordered. Tuples, on the other hand, are best for fixed collections that represent a single, unchangeable entity. This fundamental difference in mutability drives their respective use cases and performance characteristics.

Lists vs. Tuples: Key Differences
FeatureListTuple
SyntaxSquare brackets []Parentheses ()
MutabilityMutable (can be changed)Immutable (cannot be changed)
PurposeDynamic collections, general-purpose storageFixed collections, record-like data, function return values
PerformanceSlightly slower for iteration/access (due to mutability overhead)Slightly faster for iteration/access (due to fixed size)
MemoryGenerally more memory overheadGenerally less memory overhead
Use as Dictionary KeyNo (must be hashable)Yes (if all elements are hashable)
Choose lists for dynamic, changeable data; choose tuples for fixed, unchangeable data.
Key Takeaways
  • Lists are ordered, mutable collections defined by square brackets [], allowing elements to be added, removed, or modified after creation.

  • Tuples are ordered, immutable collections defined by parentheses (), meaning their contents cannot be changed once created.

  • Both lists and tuples support indexing (e.g., my_list[0], my_tuple[-1]) and slicing (e.g., my_list[1:4]) to access elements or create sub-sequences.

  • List methods like append(), insert(), remove(), pop(), sort(), and extend() modify the list in-place.

  • Tuples are ideal for fixed data, function return values, and as dictionary keys due to their immutability, which ensures data integrity.

  • Common sequence operations like len(), in for membership, + for concatenation, and for repetition apply to both lists and tuples.

  • Use list comprehensions for concise and efficient creation of lists based on transformations or filtering of existing iterables.

← All lessons in Python Basics & Syntax

Ready to keep this from fading?

Bitelrn turns lessons like this into a full course — quizzes, a knowledge map, and spaced review.

Get started free