Maison > développement back-end > Tutoriel Python > Comment aplatir efficacement des listes irrégulièrement imbriquées en Python ?

Comment aplatir efficacement des listes irrégulièrement imbriquées en Python ?

Mary-Kate Olsen
Libérer: 2024-12-30 18:38:20
original
575 Les gens l'ont consulté

How to Efficiently Flatten Irregularly Nested Lists in Python?

Comment aplatir une liste de listes imbriquées irrégulières

Bien qu'il y ait des discussions autour de l'aplatissement des structures de liste, les solutions ont tendance à échouer lorsque les listes sont profondément imbriqué. Une approche efficace est présentée ci-dessous :

Approche de fonction récursive

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
Copier après la connexion

Cette fonction vérifie si chaque élément est itérable (sauf pour les chaînes) et l'aplatit de manière récursive si vrai . Des éléments non itérables sont ajoutés au résultat.

Approche de la fonction génératrice

L'amélioration de la lisibilité et des performances du processus d'aplatissement est possible à l'aide des fonctions génératrices :

Python 2 (utilisant 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
Copier après la connexion

Python 3 (en utilisant un tuple pour str et 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
Copier après la connexion

Cette fonction génératrice renvoie paresseusement les éléments aplatis, optimisant ainsi l'utilisation de la mémoire . Il peut être itéré ou converti en liste selon les besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal