# List & Dict Comprehensions in Python

Python comprehensions are syntactic sugar constructs that provide a way to build a list, dictionary or set from a starting list, dictionary or set whilst altering or filtering elements.

Comprehensions follow mathematical set builder notation rather than map and filter functions.

## List Comprehension

Make a List that contains the doubled values of a starting list:

``````values = [2, 4, 6, 8, 10]
doubled_values = [x*2 for x in values]
print(doubled_values) # Outputs [4, 8, 12, 16, 20]
``````

You could achieve the same result like this:

``````values = [2, 4, 6, 8, 10]
doubled_values = []
for x in values:
doubled_values.append(x*2)
print(doubled_values)
``````

…which is considerably more verbose.

List comprehensions have the same effect as the `map` method in other languages. For example, in JavaScript you could achieve the above like this:

``````const values = [2, 4, 6, 8, 10]
const doubled_values = values.map((x) => x*2)
console.log(doubled_values) // Outputs [ 4, 8, 12, 16, 20 ]
``````

## Filtering

You can filter a list by adding a conditional statement. A filtered list comprehension takes this form:

``````[ element-expression for element in sequence if boolean-expression ]
``````

For example:

``````values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_values = [x for x in values if x %2 ==0]
odd_values = [x for x in values if x %2 !=0]
print(even_values)
print(odd_values)

# Make a list of the cubes of all even numbers
cubed_even_values = [x**3 for x in values if x %2 ==0]
``````

## Flatten a Multi-Dimensional List

To convert a two-dimensional list to a single dimension list, containing all the original elements of the sublists as a single list:

``````two_d_list = [[1,2,3],[4,5,6],[7,8,9]]
flattened = [item for sublist in two_d_list for item in sublist]
print(flattened) # prints [1, 2, 3, 4, 5, 6, 7, 8, 9]
``````

This is known as “flattening” a list.

Explanation:

``````flattened = [
item			# Item to be appended to flattened
for sublist in two_d_list	# Loop through the list to get the sublists
for item in sublist		# Loop through each sublist to get the item
]
print(flattened) # prints [1, 2, 3, 4, 5, 6, 7, 8, 9]
``````

Note the order:

• The item to append to the collection is referenced first
• Sublists are then generated from the initial 2d list
• Items are then generated from the sublist