Summary: in this tutorial, you’ll learn about Python List comprehensions that allow you to create a new list from an existing one.
Introduction to Python list comprehensions #
In programming, you often need to transform elements of a list and return a new list.
For example, suppose that you have a list of five numbers like this:
numbers = [1, 2, 3, 4, 5]
Code language: Python (python)
And you want to get a list of squares based on this numbers
list
The straightforward way is to use a for loop:
numbers = [1, 2, 3, 4, 5]
squares = []
for number in numbers:
squares.append(number**2)
print(squares)
Code language: Python (python)
Output:
[1, 4, 9, 16, 25]
Code language: JSON / JSON with Comments (json)
In this example, the for
loop iterates over the elements of the numbers
list, squares each number and adds the result to the squares list.
Note that a square number is the product of the number multiplied by itself. For example, square number 2 is 2*2 = 4, square number of 3 is 3*3 = 9, and so on.
To make the code more concise, you can use the built-in map()
function with a lambda expression:
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda number: number**2, numbers))
print(squares)
Code language: Python (python)
Output:
[1, 4, 9, 16, 25]
Code language: JSON / JSON with Comments (json)
Since the map()
function returns an iterator, you need to use the list()
function to convert the iterator to a list.
Both the for
loop and map()
function can help you create a new list based on an existing one. But the code isn’t really concise and beautiful.
To help you create a list based on the transformation of elements of an existing list, Python provides a feature called list comprehensions.
The following shows how to use list comprehension to make a list of squares from the numbers
list:
numbers = [1, 2, 3, 4, 5]
squares = [number**2 for number in numbers]
print(squares)
Code language: Python (python)
Output:
[1, 4, 9, 16, 25]
Code language: JSON / JSON with Comments (json)
And here’s the list comprehension part:
squares = [number**2 for number in numbers]
Code language: Python (python)
A list comprehension consists of the following parts:
- An input list (
numbers
) - A variable that represents the elements of the list (
number
) - An output expression (
number**2
) that returns the elements of the output list from the elements of the input list.
The following shows the basic syntax of the Python list comprehension:
[output_expression for element in list]
Code language: Python (python)
It’s equivalent to the following:
output_list = []
for element in list:
output_list.append(output_expression)
Code language: Python (python)
Python list comprehension with if condition #
The following shows a list of the top five highest mountains on Earth:
mountains = [
['Makalu', 8485],
['Lhotse', 8516],
['Kanchendzonga', 8586],
['K2', 8611],
['Everest', 8848]
]
Code language: Python (python)
To get a list of mountains where the height is greater than 8600 meters, you can use a for
loop or the filter()
function with a lambda expression like this:
mountains = [
['Makalu', 8485],
['Lhotse', 8516],
['Kanchendzonga', 8586],
['K2', 8611],
['Everest', 8848]
]
highest_mountains = list(filter(lambda m: m[1] > 8600, mountains))
print(highest_mountains)
Code language: Python (python)
Output:
[['K2', 8611], ['Everest', 8848]]
Code language: Python (python)
Like the map()
function, the filter()
function returns an iterator. Therefore, you need to use the list()
function to convert the iterator to a list.
Python List comprehensions provide an optional predicate that allows you to specify a condition for the list elements to be included in the new list:
[output_expression for element in list if condition]
Code language: Python (python)
This list comprehension allows you to replace the filter()
with a lambda expression:
mountains = [
['Makalu', 8485],
['Lhotse', 8516],
['Kanchendzonga', 8586],
['K2', 8611],
['Everest', 8848]
]
highest_mountains = [m for m in mountains if m[1] > 8600]
print(highest_mountains)
Code language: Python (python)
Output:
[['K2', 8611], ['Everest', 8848]]
Code language: Python (python)
Summary #
- Python list comprehensions allow you to create a new list from an existing one.
- Use list comprehensions instead of
map()
orfilter()
to make your code more concise and readable.