5 Best Ways to Flatten a 2D List in Python

πŸ’‘ Problem Formulation: When working with matrices or any kind of nested lists in Python, there are cases when you need to transform this 2D list structure into a 1D list, meaning you want to flatten it. Let’s say you have a list like [[1, 2], [3, 4]], the desired output after flattening would be [1, 2, 3, 4].

Method 1: Nested Loops

Using nested loops is a straightforward method to flatten a 2D list. In this method, we iterate over each sublist in the main list and then iterate over each item in the sublist, appending each element to the new flat list. This works well for small lists but might be slow for larger ones due to its O(n*m) complexity.

Here’s an example:

flat_list = []
two_d_list = [[1, 2], [3, 4], [5, 6]]
for sublist in two_d_list:
    for item in sublist:
        flat_list.append(item)

Output: [1, 2, 3, 4, 5, 6]

This snippet defines an empty list and iterates over each sublist and item in the 2D list, appending each element to the newly created ‘flat_list’.

Method 2: List Comprehension

List comprehension provides a more concise and readable way to flatten a 2D list. By writing a single line of code, you can achieve the same result as nested loops. It’s also generally faster since list comprehensions have optimized performance in Python.

Here’s an example:

two_d_list = [[1, 2], [3, 4], [5, 6]]
flat_list = [item for sublist in two_d_list for item in sublist]

Output: [1, 2, 3, 4, 5, 6]

The code uses a list comprehension to iterate over each sublist and item, directly creating a new flat list.

Method 3: Using itertools.chain

The itertools.chain() function from Python’s itertools module is an elegant and efficient way to flatten a 2D list. It’s particularly useful when dealing with large datasets, as it creates an iterator that chains the input sublists together into a single iterable.

Here’s an example:

import itertools

two_d_list = [[1, 2], [3, 4], [5, 6]]
flat_list = list(itertools.chain(*two_d_list))

Output: [1, 2, 3, 4, 5, 6]

After importing itertools, we apply the chain() function to the unpacked 2D list, then convert the resulting iterator into a list.

Method 4: Using numpy

For numerical data, the numpy library provides a highly optimized method for flattening lists through its array manipulation functions. It’s a great option when you work with numerical data and mathematical operations are needed on the flattened list.

Here’s an example:

import numpy as np

two_d_list = [[1, 2], [3, 4], [5, 6]]
flat_list = np.array(two_d_list).flatten()

Output: [1, 2, 3, 4, 5, 6]

This code converts the 2D list into a numpy array and uses the flatten() method to obtain a flattened list.

Bonus One-Liner Method 5: Using sum

The sum() function, commonly used to add numbers, can be repurposed to flatten a 2D list by initializing its ‘start’ parameter as an empty list. This is a simple one-liner, but it may not be as intuitive as other methods.

Here’s an example:

two_d_list = [[1, 2], [3, 4], [5, 6]]
flat_list = sum(two_d_list, [])

Output: [1, 2, 3, 4, 5, 6]

This snippet uses the sum() function with an initial value of an empty list to concatenate the sublists into a single list.

Summary/Discussion

  • Method 1: Nested Loops. Simple implementation. Slower for large lists.
  • Method 2: List Comprehension. Concise and readable. Faster performance for Pythonic code.
  • Method 3: Using itertools.chain. Efficient for large datasets. Requires importing itertools.
  • Method 4: Using numpy. Optimized for numerical data. Requires numpy installation.
  • Bonus Method 5: Using sum. Clever one-liner. Not immediately obvious and might be slower for very large lists.