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!