How do I make a flat list out of a list of lists in Python?

To flatten a list of lists into a single flat list in Python, you can use several methods depending on the structure of your data (e.g., single-level vs. deeply nested lists). Here are the most common and efficient approaches:

1. Single-Level Nesting

If your list contains lists at one level deep, use these methods:

List Comprehension (Pythonic and Readable)

list_of_lists = [[1, 2], [3, 4], [5, 6]]
flat_list = [item for sublist in list_of_lists for item in sublist]
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6]

itertools.chain (Efficient for Large Lists)

import itertools

list_of_lists = [[1, 2], [3, 4], [5, 6]]
flat_list = list(itertools.chain.from_iterable(list_of_lists))
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6]

sum Function (Simple but Inefficient for Large Data)

list_of_lists = [[1, 2], [3, 4], [5, 6]]
flat_list = sum(list_of_lists, [])
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6]

2. Deeply Nested Lists

If your list has multiple levels of nesting, use a recursive approach:

def flatten(lst):
    result = []
    for item in lst:
        if isinstance(item, list):
            result.extend(flatten(item))  # Recurse for nested lists
        else:
            result.append(item)
    return result

nested_list = [[1, [2, [3]]], [4, [5, 6]]]
flat_list = flatten(nested_list)
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6]

3. Alternative Methods

functools.reduce (Functional Style)

from functools import reduce
import operator

list_of_lists = [[1, 2], [3, 4], [5, 6]]
flat_list = reduce(operator.concat, list_of_lists)
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6]

Generators (Memory-Efficient for Large Data)

def flatten_generator(lst):
    for item in lst:
        if isinstance(item, list):
            yield from flatten_generator(item)  # Yield recursively
        else:
            yield item

nested_list = [[1, [2, 3]], [4, [5, 6]]]
flat_list = list(flatten_generator(nested_list))
print(flat_list)  # Output: [1, 2, 3, 4, 5, 6]

Key Differences

MethodUse CasePros & Cons
List ComprehensionSingle-level nestingPythonic, readable, fast
itertools.chainLarge datasets or performance-criticalEfficient, requires module import
Recursive FlattenDeeply nested listsHandles arbitrary depth, risk of stack overflow for very deep nesting
GeneratorsMemory efficiency for large dataLazy evaluation, slower for small lists
sum FunctionSmall listsSimple syntax, but slow for large data (O(n²))

Recommendations

  • Single-level lists: Use list comprehension or itertools.chain.
  • Deeply nested lists: Use recursive flattening or generators.
  • Avoid sum: Poor performance for large datasets.

By choosing the right method, you can efficiently flatten lists in Python!

Leave a Reply

Your email address will not be published. Required fields are marked *