Logia3.jpeg

The Simplest Way to Flatten a List in Python

A very common task that you probably have faced is to flat a list, let's show this with a toy example:

nested_numbers = [[1, 2], [3, 4], [5, 6]]

Let's suppose you want to iterate over each one of the numbers in the nested list or just produce a flattened list like this:

flattened_numbers = [1, 2, 3, 4, 5, 6]

Although Python doesn't have an explicit built-in to flatten iterables there are simple ways to do this common task.

You could use a double list comprehension to do this:

flattened_numbers = [number for inner_list in nested_numbers for number in inner_list]

However, I think this usually is confusing and I like to keep my list-comprehensions as simple and unnested as possible. That's why I like this approach the best:

We can use the built-in itertools module's chain method

def flatten(nested_list):
    return chain.from_iterable(nested_list)

Please be mindful that chain.from_iterable() produces a generator expression, so you can iterate directly over it do some computation over the lists, for example, let's multiply each number in nested_list 2 times:

>>> [n * 2 for n in flatten(nested_numbers)]
[2, 4, 6, 8, 10, 12]

If what you want is actually to store the flattened list you can just cast it to list

flattened_numbers = list(flatten(nested_list))