Skip to content
Tutoriels
Python
Python Flatten List: Simplify Your Code with these Tips

Python Flatten List: Simplifiez votre code avec ces astuces

Aplatir une liste en Python est une tâche courante à laquelle les programmeurs sont confrontés. Que vous traitiez une liste de listes ou une liste imbriquée, la nécessité d'aplatir ces structures en une seule liste est un défi qui se pose souvent. Cet article vous guidera à travers différentes méthodes pour aplatir une liste en Python, y compris l'expression de liste, itertools et numpy.

Python, en tant que langage de programmation de haut niveau, offre plusieurs fonctions et modules intégrés qui facilitent la manipulation des listes. Cependant, lorsqu'il s'agit d'aplatir des listes, il n'y a pas de fonction intégrée "aplatir". Mais ne vous inquiétez pas, Python propose plusieurs autres moyens d'y parvenir, et nous allons les explorer dans cet article.

Vous souhaitez créer rapidement une visualisation des données à partir d'un dataframe Python Pandas sans code ?

PyGWalker est une bibliothèque Python pour l'analyse exploratoire des données avec visualisation. PyGWalker (opens in a new tab) peut simplifier votre workflow d'analyse de données et de visualisation de données dans Jupyter Notebook, en transformant votre dataframe pandas (et polars dataframe) en une interface utilisateur de style Tableau pour l'exploration visuelle.

PyGWalker pour la visualisation des données (opens in a new tab)

Comprendre l'aplatissement de liste en Python

Avant de plonger dans les méthodes pour aplatir une liste, il est essentiel de comprendre ce que signifie l'aplatissement de liste. Aplatir une liste, ou tout autre itérable, consiste à convertir un itérable multidimensionnel ou imbriqué en une liste unidimensionnelle.

Par exemple, considérez la liste imbriquée suivante : [[1, 2, 3], [4, 5], [6, 7, 8, 9]]. La version aplatie de cette liste serait : [1, 2, 3, 4, 5, 6, 7, 8, 9]. Comme vous pouvez le voir, la structure imbriquée est supprimée et il ne reste qu'une seule liste contenant tous les éléments.

L'aplatissement d'une liste est une opération courante dans la manipulation et la préparation des données, en particulier dans les tâches de science des données et d'apprentissage automatique. C'est aussi une question populaire lors des entretiens de programmation, donc maîtriser ce concept peut être très bénéfique.

Aplatir une liste en utilisant l'expression de liste

L'expression de liste est une façon compacte de créer des listes en Python. C'est une construction syntaxique qui vous permet de créer des listes à partir de listes existantes (ou d'autres itérables) en fonction d'une condition. L'expression de liste peut également être utilisée pour aplatir une liste en Python.

Voici comment vous pouvez aplatir une liste en utilisant l'expression de liste :

nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = [item for sublist in nested_list for item in sublist]
print(flattened_list)

Dans ce code, l'expression de liste itère sur chaque sous-liste de la liste imbriquée, puis sur chaque élément de la sous-liste. Le résultat est une nouvelle liste qui contient tous les éléments des sous-listes.

L'expression de liste est une façon "Pythonique" d'aplatir une liste et est généralement plus rapide que les boucles for classiques grâce aux optimisations sous-jacentes de l'interpréteur Python.

Utiliser itertools pour aplatir une liste

Le module itertools de Python fournit un ensemble d'outils pour manipuler les itérables. Parmi ces outils, on trouve la fonction chain(), qui peut être utilisée pour aplatir une liste.

La fonction itertools.chain() prend plusieurs itérables en arguments et renvoie un seul itérable qui produit le contenu des entrées sous la forme d'un flux unique d'éléments. Cela le rend parfait pour aplatir une liste.

Voici un exemple de la façon d'utiliser `itertools.chain

()` pour aplatir une liste :

import itertools
 
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = list(itertools.chain(*nested_list))
print(flattened_list)

Dans ce code, l'opérateur * est utilisé pour déballer la liste imbriquée en tant qu'arguments de la fonction chain(). La fonction chain() combine ensuite toutes les sous-listes en une seule liste.

La méthode itertools.chain() est un outil puissant pour aplatir des listes, surtout lorsqu'il s'agit de grands ensembles de données, car elle renvoie un itérable et ne consomme pas de mémoire comme l'expression de liste ou les boucles for.

Aplatir une liste en utilisant numpy

numpy est une bibliothèque Python populaire pour les opérations numériques. Elle fournit une fonction appelée flatten() qui peut être utilisée pour aplatir un tableau. Bien que numpy soit principalement utilisé pour les calculs numériques, sa fonction flatten() peut également être utilisée pour aplatir une liste de listes.

Voici un exemple de la façon d'utiliser la fonction flatten() de numpy pour aplatir une liste :

import numpy as np
 
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flattened_list = np.array(nested_list).flatten().tolist()
print(flattened_list)

Dans ce code, la liste imbriquée est d'abord convertie en un tableau numpy en utilisant la fonction np.array(). La fonction flatten() est ensuite appelée sur le tableau numpy pour l'aplatir. Enfin, le tableau numpy aplati est converti à nouveau en liste en utilisant la fonction tolist().

Bien que la fonction flatten() de numpy soit pratique, il est à noter qu'elle peut ne pas être la méthode la plus efficace pour aplatir une liste, surtout pour les données non numériques, car la conversion en tableau numpy peut être coûteuse.

Dans la prochaine partie de cet article, nous continuerons à explorer d'autres méthodes pour aplatir une liste en Python, y compris l'aplatissement récursif et plus encore. Restez à l'écoute! L'aplatissement récursif est une autre méthode pour aplatir une liste en Python. Cette méthode est particulièrement utile lorsqu'il s'agit de listes profondément imbriquées. L'idée est de parcourir les éléments de la liste et, pour chaque élément, s'il s'agit d'une liste, de l'aplatir récursivement ; sinon, de l'ajouter au résultat.

Voici un exemple d'implémentation de l'aplatissement récursif en Python :

def aplatir_liste(liste_imbriquee):
    resultat = []
    for i in liste_imbriquee:
        if isinstance(i, list):
            resultat.extend(aplatir_liste(i))
        else:
            resultat.append(i)
    return resultat
 
liste_imbriquee = [[1, 2, [3, 4]], [5, 6], [7, [8, [9]]]]
liste_aplatie = aplatir_liste(liste_imbriquee)
print(liste_aplatie)

Dans ce code, la fonction aplatir_liste est définie pour prendre une liste en entrée et renvoyer une liste aplatie. La fonction parcourt les éléments de la liste d'entrée et, si un élément est une liste, elle s'appelle récursivement pour aplatir cette liste.

L'aplatissement récursif est une méthode puissante pour aplatir une liste, mais il convient de noter qu'il peut provoquer une erreur de débordement de pile si la liste est trop profondément imbriquée.

Aplatissement d'une liste à l'aide de fonctions intégrées Python

Bien que Python ne dispose pas d'une fonction intégrée 'aplatir', il fournit plusieurs fonctions intégrées qui peuvent être combinées pour aplatir une liste. Une telle combinaison est la fonction sum() et la compréhension de liste.

Voici comment vous pouvez utiliser les fonctions intégrées de Python pour aplatir une liste :

liste_imbriquee = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
liste_aplatie = sum(liste_imbriquee, [])
print(liste_aplatie)

Dans ce code, la fonction sum() est utilisée pour additionner les éléments de la liste imbriquée. Le deuxième argument de la fonction sum() est une liste vide, qui sert de valeur initiale de la somme. La fonction sum() concatène ensuite les sous-listes ensemble pour former une seule liste.

Bien que cette méthode soit simple et n'utilise que des fonctions intégrées, elle n'est pas aussi efficace que les autres méthodes que nous avons discutées, surtout pour les grandes listes, car elle crée une nouvelle liste à chaque fois qu'elle concatène deux listes.


Maintenant, répondons à quelques questions fréquemment posées sur l'aplatissement d'une liste en Python.

FAQ

  1. Qu'est-ce que l'aplatissement d'une liste en Python ?

L'aplatissement d'une liste en Python consiste à convertir une liste multidimensionnelle ou imbriquée en une liste unidimensionnelle. Cette opération est courante dans la manipulation et la préparation des données.

  1. Comment puis-je utiliser itertools pour aplatir une liste en Python ?

Vous pouvez utiliser la fonction chain() du module itertools pour aplatir une liste en Python. La fonction chain() prend plusieurs itérables comme arguments et renvoie un seul itérateur qui produit le contenu des entrées sous la forme d'un flux unique d'éléments.

  1. Quelle est la différence entre flatten() et flat() en Python ?

La fonction flatten() est une méthode des tableaux numpy qui renvoie une copie du tableau réduite à une dimension. D'autre part, flat est un attribut des tableaux numpy qui renvoie un itérateur sur le tableau. Cet itérateur se comporte de manière similaire à l'itérateur intégré de Python, mais il peut être utilisé pour modifier les éléments du tableau.

Conclusion

Dans cet article, nous avons exploré différentes méthodes pour aplatir une liste en Python, notamment la compréhension de liste, itertools, numpy et l'aplatissement récursif. Nous avons également répondu à certaines questions fréquemment posées sur l'aplatissement de liste en Python. En comprenant ces méthodes, vous pouvez simplifier votre code et améliorer ses performances lorsqu'il s'agit de manipuler des listes.