Python List comprehensions
By Flavio Copes
Learn Python list comprehension syntax, including transformations, filters, conditional expressions, and when a loop or generator expression is clearer.
A list comprehension creates a new list from an iterable.
The basic syntax is:
[expression for item in iterable]
For example, you can square every number in a list:
numbers = [1, 2, 3, 4, 5]
numbers_squared = [number**2 for number in numbers]
# [1, 4, 9, 16, 25]
This is equivalent to:
numbers_squared = []
for number in numbers:
numbers_squared.append(number**2)
It also replaces many simple uses of map():
numbers_squared = list(map(lambda number: number**2, numbers))
The comprehension is usually easier to read.
See the official Python list comprehensions tutorial and language reference for the complete rules.
Filter values
Add an if clause after the loop to keep matching values:
numbers = [1, 2, 3, 4, 5]
even_numbers = [number for number in numbers if number % 2 == 0]
# [2, 4]
The expression still decides what goes into the new list:
even_numbers_squared = [
number**2
for number in numbers
if number % 2 == 0
]
# [4, 16]
Use a conditional expression
Put a conditional expression before for when every input should produce a value:
labels = [
'even' if number % 2 == 0 else 'odd'
for number in numbers
]
# ['odd', 'even', 'odd', 'even', 'odd']
Notice the difference:
ifafterforfilters values outif...elsebeforefortransforms every value
Keep comprehensions readable
List comprehensions are great for a small transformation or filter.
Use a regular loop when the operation needs side effects, several steps, or complicated conditions. Clear code is more important than fitting everything on one line.
A list comprehension creates the whole list immediately. Use a generator expression when you want to produce values lazily:
squares = (number**2 for number in range(1_000_000))Related posts about python: