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
Patricia Arquetteoriginal
2024-12-30 18:14:10461parcourir

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]
]

Et viser à obtenir :

[1, 2, 3, 4, 5, 6, 7, 8, 9]

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]

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)

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]

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!

Déclaration:
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