Maison > développement back-end > Tutoriel Python > Comment puis-je aplatir efficacement une liste de listes en Python ?

Comment puis-je aplatir efficacement une liste de listes en Python ?

Patricia Arquette
Libérer: 2024-12-30 18:14:10
original
460 Les gens l'ont consulté

How Can I Efficiently Flatten a List of Lists in Python?

Aplatir une liste de listes

Vous avez une liste de listes et souhaitez la transformer en une liste unique et plate. Par exemple, vous pourriez avoir :

[
    [1, 2, 3],
    [4, 5, 6],
    [7],
    [8, 9]
]
Copier après la connexion

Et viser à obtenir :

[1, 2, 3, 4, 5, 6, 7, 8, 9]
Copier après la connexion

Solution

Une compréhension de liste imbriquée offre une solution élégante solution pour aplatir une liste de listes :

flat_list = [x for xs in xss for x in xs]
Copier après la connexion

Ce code parcourt chaque sous-liste en xss et ses éléments, en accumulant les résultats dans flat_list.

Vous pouvez également aplatir en utilisant une compréhension de liste avec une jointure, ou utiliser la fonction sum() :

flat_list = [j for i in xss for j in i]
flat_list = sum(xss, [])  # or sum(xss)
Copier après la connexion

Performance Comparaison

Bien que ces méthodes fournissent des résultats équivalents, leurs performances varient. Les benchmarks montrent que la compréhension des listes imbriquées est nettement plus rapide que les autres approches, en particulier pour les grandes listes d'entrée.

Cette performance supérieure provient du fait que la compréhension des listes génère une seule liste une seule fois, ne copiant chaque élément qu'une seule fois. En revanche, la méthode basée sur les jointures crée de nombreuses listes intermédiaires, tandis que l'approche sum() implique une opération plus complexe.

Approche récursive

Si votre liste de listes a une profondeur d'imbrication arbitraire, vous aurez peut-être besoin d'une approche récursive pour un aplatissement complet. Considérez la fonction suivante :

def flatten_completely(xss):
    return [x for elem in xss for x in flatten_completely(elem) if not isinstance(x, list)] if isinstance(xss, list) else [xss]
Copier après la connexion

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