logo

Aplatir la liste en Python

Une introduction

UN Liste est considérée comme l’une des structures de données les plus flexibles du langage de programmation Python. D'un autre côté, une liste bidimensionnelle, ou liste 2D, généralement appelée liste de listes, est un objet d'une liste où chaque élément est lui-même une liste. Par exemple : [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

L'aplatissement d'une liste de listes est un processus de transformation d'une liste bidimensionnelle en une liste unidimensionnelle en désimbriquant chaque élément de liste conservé dans la liste de listes, c'est-à-dire en transformant [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] à [9, 8, 7, 6, 5, 4, 3, 2, 1].

Nous pouvons effectuer le processus d'aplatissement à l'aide des éléments imbriqués pour boucles, récursion, compréhensions de listes, fonctions de base, ou importation de bibliothèques ou de packages dans Python sur la profondeur et la régularité des listes imbriquées.

Dans ce didacticiel, nous travaillerons sur différentes méthodes afin d'aplatir les listes imbriquées à l'aide du langage de programmation Python. Mais avant de commencer, comprenons les types de listes imbriquées.

Quels sont les types de listes imbriquées ?

Comme nous le savons, Python est un langage de programmation faiblement typé. On peut donc rencontrer deux types de Liste de Listes. Ces listes de listes ou listes imbriquées sont les suivantes :

  1. Liste régulière des listes
  2. Liste irrégulière des listes

Liste régulière des listes

Chaque élément de la liste régulière des listes est appelé sous-liste, observant ainsi l'uniformité du type de l'élément. Par exemple : [[9, 8, 7], [6, 5, 4], [3, 2, 1]] est une liste régulière de listes comme [9, 8, 7], [6, 5, 4] , [3, 2, 1] est du type liste.

Liste irrégulière des listes

sonu nigam

Chaque élément de la liste irrégulière de listes est appelé sous-liste ou élément non-liste (par exemple, une chaîne ou un entier). Il y a donc une irrégularité au niveau du type d’élément. Par exemple : [[9, 8, 7], [6, 5], 4, 3] est une liste irrégulière de listes car [9, 8, 7] et [6, 5] sont du type liste, alors que 4 et 3 sont de type int.

Aplatir la liste des listes à l'aide des boucles for imbriquées

Aplatir la liste des listes avec l'imbriqué pour L'aide des boucles est considérée comme une approche par force brute pour obtenir une liste plate. Nous pouvons exécuter cette méthode en sélectionnant chaque élément de la liste bidimensionnelle et en l'organisant dans une liste unidimensionnelle.

Considérons l'exemple suivant qui fonctionne à la fois pour les listes de listes régulières et irrégulières.

Exemple:

 # defining the function def flattenlist(_2dlist): # defining an empty list flatlist = [] # Iterating through the outer list for item in _2dlist: if type(item) is list: # If the item is of the list type, iterating through the sub-list for element in item: flatlist.append(element) else: flatlist.append(item) return flatlist # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] print('Genuine List:', nestedlist) print('Converted Flat List:', flattenlist(nestedlist)) 

Sortir:

 Genuine List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] Converted Flat List: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Explication:

Dans l'exemple ci-dessus, nous avons défini une fonction comme aplatir la liste qui prend un paramètre comme _2dlist . Nous avons ensuite utilisé pour boucle pour parcourir les éléments de la liste imbriquée et les ajouter pour générer une liste aplatie. Nous avons ensuite défini la liste imbriquée et implémenté le aplatir la liste fonction. En conséquence, la liste imbriquée s’est transformée avec succès en liste aplatie.

Aplatir la liste imbriquée à l'aide d'une compréhension de liste

L'aplatissement de la liste des listes à l'aide d'une compréhension de liste est considéré comme une approche élégante pour obtenir une liste plate dépendant d'une liste bidimensionnelle existante. Cependant, cette approche offre une solution moins intuitive.

Considérons l'exemple suivant.

Exemple:

 # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # list comprehension flatlist = [element for sub_list in nestedlist for element in sub_list] print('Genuine list:', nestedlist) print('Converted list:', flatlist) 

Sortir:

 Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Explication:

Dans l'exemple ci-dessus, nous avons défini une liste imbriquée et une compréhension de liste. Nous les avons ensuite imprimés pour les utilisateurs. En conséquence, la liste imbriquée a été transformée avec succès en liste aplatie.

Aplatir la liste des listes à l'aide de la méthode récursive

Nous pouvons également utiliser la méthode récursive pour aplatir la liste bidimensionnelle. Considérons l'exemple suivant implémentant la méthode récursive afin d'aplatir la liste des listes. Cette implémentation fonctionne bien pour les listes de listes régulières et irrégulières.

Exemple:

 # defining a function def flattenlist(nestedlist): if len(nestedlist) == 0: return nestedlist if isinstance(nestedlist[0], list): return flattenlist(nestedlist[0]) + flattenlist(nestedlist[1:]) return nestedlist[:1] + flattenlist(nestedlist[1:]) print(flattenlist([[10, 20, 30, 40], [50, 60, 70], [80, 90], 100])) 

Sortir:

 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Explication:

Dans l'exemple ci-dessus, nous avons défini une fonction et utilisé un si déclaration indiquant si la longueur de la liste imbriquée est égale à zéro, puis renvoie la liste imbriquée.

collections en java

Si l'élément de données sur l'index zéro est une instance d'une liste, alors l'index de liste entre à nouveau dans la fonction et s'ajoute à l'index suivant de la liste et ainsi de suite. Sinon, la fonction renverra les éléments et ainsi de suite. Enfin, nous avons défini la liste imbriquée et exécuté la fonction. En conséquence, la liste des listes s’est aplatie de manière récursive.

Utiliser les bibliothèques de Python

Nous pouvons également utiliser certaines bibliothèques du langage de programmation Python pour aplatir la liste des listes. La mise en œuvre de ces bibliothèques est décrite ci-dessous :

Aplatir la liste des listes à l'aide des functools et des bibliothèques d'opérateurs

Le opérateur la bibliothèque fournit le icônecat() fonction pour effectuer l’opération fondamentale comme la concaténation. Nous pouvons appliquer cette fonction de manière cumulative aux éléments de données d'une liste imbriquée, de gauche à droite, entraînant la réduction de la liste imbriquée en une liste aplatie.

Considérons l'exemple suivant pour comprendre sa mise en œuvre.

Exemple:

 # importing the required libraries import operator import functools regularlist = [] # Converting the list of lists into a flattened one. def convo(nestedlist): for element in nestedlist: if type(element) is list: regularlist.append(element) else: regularlist.append([element]) return regularlist twoDlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] regular2Dlist = convo(twoDlist) print('Given List:', twoDlist) print('Converted list:', functools.reduce(operator.iconcat, regular2Dlist, [])) 

Sortir:

 Given List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110] 

Explication:

Dans l'exemple ci-dessus, nous avons importé le outils fonctionnels bibliothèque avec le opérateur bibliothèque. Nous avons ensuite défini une liste vide comme liste régulière . Nous avons alors défini une fonction comme m'envoyer un message pour transformer la liste des listes en liste aplatie. Dans cette fonction, nous avons utilisé le pour boucle où les éléments de la liste imbriquée sont ajoutés à la liste vide que nous avons définie précédemment. Plus tard, nous avons défini la liste imbriquée et exécuté la fonction. En conséquence, la liste des listes est convertie avec succès en liste aplatie.

Aplatir la liste des listes à l'aide de la bibliothèque itertools

Le itertools la bibliothèque fournit le chaîne() fonction qui nous permet idéalement de transformer une liste imbriquée en une seule liste aplatie. Cette fonction traite les séries consécutives comme une série unique en les itérant via l'itérable passé en paramètre de manière série.

Considérons l'exemple suivant :

Exemple:

 # importing the itertools library import itertools # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] flattenlist = list(itertools.chain(*nestedlist)) print('The nested list:', nestedlist) print('The flattened list:', flattenlist 

Sortir:

 The nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] The flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Explication:

Dans l'exemple ci-dessus, nous avons importé le itertools bibliothèque et généré une liste imbriquée. Nous avons ensuite utilisé le chaîne() fonction pour convertir la liste imbriquée donnée en liste aplatie. Enfin, nous avons renvoyé le résultat aux utilisateurs. En conséquence, la liste des listes est aplatie avec succès.

collections en java

Aplatir la liste des listes à l'aide de la bibliothèque NumPy

Le NumPy La bibliothèque fournit diverses opérations quotidiennes, y compris la concaténation de tableaux réguliers bidimensionnels par colonnes ou par lignes. Nous utiliserons l'attribut connu sous le nom plat afin d'obtenir un itérateur unidimensionnel sur le tableau pour conquérir la cible. Considérons l'exemple suivant pour comprendre l'utilisation de la fonction concatenate et de l'attribut flat.

Exemple:

 # importing the library import numpy # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the concatenate function along with the flat attribute flattenlist = list(numpy.concatenate(nestedlist).flat) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Sortir:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Explication:

Dans l'exemple ci-dessus, nous avons importé le numpy bibliothèque et défini une liste imbriquée. Nous avons ensuite utilisé le enchaîner fonction du numpy bibliothèque avec son plat attribut pour aplatir les éléments de la liste imbriquée et les concaténer en une nouvelle liste aplatie. Enfin, nous avons imprimé le résultat pour les utilisateurs. Ainsi, la liste des listes est aplatie avec succès.

Utiliser les fonctions de base

Nous pouvons également effectuer la tâche d'aplatissement en utilisant certaines fonctions de base fournies par le langage de programmation Python.

Aplatir la liste des listes à l'aide de la fonction somme

Nous pouvons envisager de faire la somme sur des listes internes comme une autre solution au problème. Nous passons deux arguments au somme fonction : Le premier paramètre est itérable , qui est une liste imbriquée, et le deuxième paramètre est commencer qui est une liste vide pour le cas suivant qui sert de liste plate initiale où les éléments de données des sous-listes internes seront ajoutés.

On peut dire que cette approche est assez pratique puisque nous n’avons rien à importer. Cependant, il est plus lent que le itertools() et chaîne() fonctionne lorsqu'il y a un grand nombre de sous-listes présentes dans la liste imbriquée.

Considérons l'exemple suivant :

Exemple:

 # defining a nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the sum function flattenlist = sum(nestedlist, []) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Sortir:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Explication:

Dans l'exemple ci-dessus, nous avons défini la liste imbriquée. Nous avons ensuite utilisé le somme() fonction et a aplati la liste imbriquée en une liste unidimensionnelle, et imprimé la liste résultante pour les utilisateurs. En conséquence, nous avons transformé avec succès la liste des listes en une liste plate.

Aplatir la liste des listes à l'aide du mot-clé Lambda

On peut définir une fonction anonyme en utilisant le mot-clé lambda . Nous pouvons passer la liste régulière/irrégulière comme paramètre à cette fonction anonyme. L'évaluation de l'expression est effectuée afin d'obtenir une liste unidimensionnelle plate.

Considérons l'exemple suivant :

expressions java lambda

Exemple:

 # Defining the nested list nestedlist = [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] # Using lambda parameters: expression flattenlist = lambda nestedlist:[item for element in nestedlist for item in flattenlist(element)] if type(nestedlist) is list else [nestedlist] print('The Nested list:', nestedlist) print('The Flattened List:', flattenlist(nestedlist)) 

Sortir:

 The Nested list: [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] The Flattened List: [10, 20, 30, 30, 50, 60, 40, 60, 70, 70] 

Explication:

Dans l'exemple ci-dessus, nous avons défini une liste imbriquée. Nous avons ensuite utilisé le lambda mot-clé accompagné d'un argument définissant une expression pour la compréhension de la liste. Nous les avons ensuite imprimés pour les utilisateurs. En conséquence, nous avons réussi à convertir la liste irrégulière bidimensionnelle en liste aplatie.