Home > Backend Development > Python Tutorial > How to Efficiently Flatten Irregularly Nested Lists in Python?

How to Efficiently Flatten Irregularly Nested Lists in Python?

Mary-Kate Olsen
Release: 2024-12-30 18:38:20
Original
575 people have browsed it

How to Efficiently Flatten Irregularly Nested Lists in Python?

How to Flatten an Irregular Nested List of Lists

Although there are discussions around flattening list structures, solutions tend to fall short when lists are deeply nested. One effective approach is presented below:

Recursive Function Approach

def flatten(x):
    result = []
    for el in x:
        if hasattr(el, "__iter__") and not isinstance(el, basestring):
            result.extend(flatten(el))
        else:
            result.append(el)
    return result
Copy after login

This function checks if each element is iterable (except for strings) and recursively flattens it if true. Non-iterable elements are appended to the result.

Generator Function Approach

Enhancing the readability and performance of the flattening process is possible using generator functions:

Python 2 (using Iterable ABC):

from collections import Iterable

def flatten(xs):
    for x in xs:
        if isinstance(x, Iterable) and not isinstance(x, basestring):
            for item in flatten(x):
                yield item
        else:
            yield x
Copy after login

Python 3 (using tuple for str and bytes):

from collections.abc import Iterable

def flatten(xs):
    for x in xs:
        if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
            yield from flatten(x)
        else:
            yield x
Copy after login

This generator function lazily returns the flattened elements, optimizing memory usage. It can be iterated over or converted to a list as needed.

The above is the detailed content of How to Efficiently Flatten Irregularly Nested Lists in Python?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template