List Comprehensions

circuitpython_marius-ciocirlan-414588-unsplash.jpg
Photo by Marius Ciocirlan on Unsplash

List comprehensions provide a more concise way of doing simple filtering and mapping. Their use is very idiomatic in Python, so you'll see them a lot. Understanding them will not only let you write better Python code, it will also help you understand other code.

Let's start with the concept of mapping. A list comprehension can be used to do the mapping we saw earlier:

Download: file
a = range(20)
[x**2 for x in a]
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]

One thing to notice is that this results directly in a list unlike map, whose result needs to be converted to a list.  Secondly, notice how much simpler and direct the syntax is:

[function_of_variable for variable in a_list]

Compare this to:

list(map(lambda x: function_of_variable, a_list))

This is even more pronounced if we add the filter:

[variable for variable in a_list if predicate_of_variable]

Compare this to:

list(map(lambda x: function_of_variable, (filter lambda x: predicate_of_variable, a_list)))

To pick out the multiples of 3 as before we can use:

Download: file
[x for x in a if x % 3 == 0]
#[0, 3, 6, 9, 12, 15, 18]

As before we can combine mapping and filtering:

Download: file
[x**2 for x in a if x % 3 == 0]
#[0, 9, 36, 81, 144, 225, 324]

Compare this to the version using map and filter:

Download: file
list(map(lambda x: x**2, filter(lambda x: x % 3 == 0, a)))
#[0, 9, 36, 81, 144, 225, 324]
This guide was first published on Oct 11, 2018. It was last updated on Oct 11, 2018.
This page (List Comprehensions) was last updated on Jun 23, 2020.