Skip to main content

Working with Lists

In this chapter, you'll learn how to loop through an entire list using just a few lines of code regardless of how long the list is. Looping allows you to take the same action with every item in a list, whether it's printing out each name in a list of people or performing the same statistical calculation on every element in a list of numbers.

Looping Through Lists

You'll often want to run through all entries in a list, performing the same task with each item. Python's for loop makes this easy.

Basic For Loop

# Loop through a list
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)

Output:

alice
david
carolina

Doing More Work Within a For Loop

# More detailed output in a loop
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f'{magician.title()}, that was a great trick.')
print(f"I can't wait to see your next trick, {magician.title()}.\n")
print("Thank you, everyone. That was a great magic show!")

Output:

Alice, that was a great trick.
I can't wait to see your next trick, Alice.

David, that was a great trick.
I can't wait to see your next trick, David.

Carolina, that was a great trick.
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

Common For Loop Mistakes

Forgetting the Colon

# This will cause a syntax error
magicians = ['alice', 'david', 'carolina']
for magician in magicians # Missing colon
print(magician)

Indentation Errors

# This will cause an indentation error
message = 'Hello'
print(message) # Unexpected indent

Making Numerical Lists

Lists are ideal for storing sets of numbers, and Python provides several tools to help you work with lists of numbers efficiently.

Using the range() Function

Python's range() function makes it easy to generate a series of numbers:

# Print numbers 1 through 4
for value in range(1, 5):
print(value)

Output:

1
2
3
4

Note that range() stops one number before the end value you specify.

Using range() to Make a List of Numbers

# Create a list of numbers
numbers = list(range(1, 6))
print(numbers)

Output:

[1, 2, 3, 4, 5]

You can also use range() to create lists with specific patterns:

# Even numbers from 2 to 10
even_numbers = list(range(2, 11, 2))
print(even_numbers)

Output:

[2, 4, 6, 8, 10]

Creating Lists with Loops

# Create a list of squares
squares = []
for value in range(1, 11):
squares.append(value**2)
print(squares)

Output:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Simple Statistics with Lists

Python provides several functions for mathematical statistics:

# Statistical functions
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits)) # 0
print(max(digits)) # 9
print(sum(digits)) # 45

List Comprehensions

List comprehensions allow you to generate lists in just one line of code:

# Create squares using list comprehension
squares = [value**2 for value in range(1, 11)]
print(squares)

Output:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

The syntax is: list_name = [expression for value in range()]

Working with Part of a List

Slicing a List

You can work with a specific group of items in a list using a slice:

# Slice a list
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3]) # First three elements

Output:

['charles', 'martina', 'michael']

Slice Variations

players = ['charles', 'martina', 'michael', 'florence', 'eli']

# From beginning to index 4
print(players[:4])

# From index 2 to end
print(players[2:])

# Last three elements
print(players[-3:])

# Every second element
print(players[::2])

Output:

['charles', 'martina', 'michael', 'florence']
['michael', 'florence', 'eli']
['michael', 'florence', 'eli']
['charles', 'michael', 'eli']

Looping Through a Slice

# Loop through part of a list
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())

Output:

Here are the first three players on my team:
Charles
Martina
Michael

Copying a List

To copy a list, you can make a slice that includes the entire original list:

# Copy a list
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:] # Creates a copy

print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
warning

If you simply assign one list to another (friend_foods = my_foods), you're not making a copy. Both variables point to the same list!

Tuples

Lists work well for storing collections of items that can change throughout the life of a program. However, sometimes you'll want to create a list of items that cannot change. Python calls these immutable lists tuples.

Defining a Tuple

# Define a tuple
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])

Output:

200
50

Tuples are Immutable

# This will cause an error
dimensions = (200, 50)
dimensions[0] = 250 # TypeError: 'tuple' object does not support item assignment

Looping Through a Tuple

# Loop through a tuple
dimensions = (200, 50)
for dimension in dimensions:
print(dimension)

Output:

200
50

Writing Over a Tuple

Although you can't modify a tuple, you can assign a new value to a variable that represents a tuple:

# Reassign a tuple
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)

dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)

Output:

Original dimensions:
200
50

Modified dimensions:
400
100

Code Formatting Guidelines (PEP 8)

Python Enhancement Proposal 8 (PEP 8) provides guidelines for formatting Python code:

Indentation

  • Use 4 spaces per indentation level
  • Don't mix tabs and spaces

Line Length

  • Limit lines to 79 characters maximum
  • For docstrings or comments, limit to 72 characters

Blank Lines

  • Use blank lines to group parts of your program visually
  • Don't overuse blank lines within functions or classes

Summary

In this chapter, you learned how to:

  • Loop through lists efficiently using for loops
  • Avoid common indentation and syntax errors
  • Generate numerical lists using range() and list comprehensions
  • Work with portions of lists using slices
  • Copy lists properly
  • Use tuples for data that shouldn't change
  • Follow Python coding style guidelines

These techniques form the foundation for working with collections of data in Python, and you'll use them frequently in larger programs.