La conversion d'un tableau 2D en un tableau 1D s'appelle l'aplatissement. Il existe de nombreuses approches pour résoudre ce problème
Nous allons en explorer quelques-unes dans ce tutoriel
Voyons un exemple
Entrée
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Sortie
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. Boucles
La façon la plus courante de résoudre le problème est d'utiliser des boucles. Je pense que la plupart d'entre vous l'ont déjà compris. Voyons les étapes pour résoudre le problème en utilisant des boucles
- Initialisez la liste des listes avec des données fictives et nommez-la données.
- Initialisez maintenant une liste vide appelée liste_plate.
- Interrogez les données
- Déballez tous les éléments de la liste actuelle.
- Ajoutez-les à la liste plate à l'aide de la méthode append.
- Imprimez le résultat.
Voyez le code pour le problème ci-dessous
# initialisation des données et d'une liste vide
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []
#
itération sur les données
for item in data :
# ajout d'éléments à la flat_list
flat_list = item
#
impression du résultat de la flat_list
print(flat_list)
Vous pouvez utiliser une autre boucle pour ajouter des éléments de sous-liste à liste_plate au lieu d'un opérateur de concaténation. Nous pouvons également utiliser des compréhensions de liste au lieu de boucles
Les deux font le même travail. Voyons maintenant la prochaine façon de résoudre le problème
#2. Itertools - Chaîne
Nous allons utiliser une méthode appelée chaîne du module intégré itertools
La méthode chaîne itère sur chaque sous-liste et retourne les éléments jusqu'à ce qu'il n'y ait plus de sous-liste. Elle renvoie un itérable que nous devons convertir en liste
Voyons les étapes de la résolution du problème
- Initialisez la liste de listes avec des données fictives et nommez-la données.
- Obtenez l'itérable aplati en utilisant itertools.chain(*data).
- Convertissez l'itérable résultant en une liste.
- Imprimez la liste aplatie.
Vous pouvez consulter le code dans l'extrait ci-dessous
# importation du module
import itertools
#
initialisation des données
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
#
aplatissement de la liste et stockage du résultat
flat_list = itertools.chain(*data)
#
conversion de l'itérable en liste et impression
print(list(flat_list))
#3. Aplatir des listes à plusieurs niveaux
Nous avons vu comment aplatir une liste de listes. Les méthodes décrites ci-dessus pour appliquer une liste ne fonctionneront pas pour les listes à plusieurs niveaux. Voyons un exemple
Entrée
[1, [2, 3, [4, 5]], 6, [<x>[7]</x>, [8, 9]
]]
Sortie
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Comme nous ne connaissons pas la profondeur des listes avant le programme, nous devons utiliser la récursivité pour résoudre le problème
- Initialisez les données comme indiqué dans l'exemple et nommez-les données.
- Initialisez une liste vide appelée liste_plate.
- Écrivez une fonction appelée aplatir_liste
- Interrogez les éléments de la liste donnée.
- Si l'élément est une liste, appelez récursivement la même fonction.
- Si l'élément n'est pas une liste, ajoutez-le à la plaque de liste.
- Invitez la fonction avec des données.
- La fonction remplira tous les éléments de la liste liste_plate .
- Imprimez la liste_plate pour vérifier le résultat.
Ouf ! Il y a beaucoup d'étapes à coder. Ne vous inquiétez pas. La conversion des instructions ci-dessus en code ne prendra pas plus de quelques minutes
# initialisation des données et de la liste vide
data = [1, [2, 3, [4, 5]], 6, [<x>[7]</x>, [8, 9]]]
flat_list = []
# fonction
def flatten_list(data) :
# itération sur les données
for element in data :
# vérification de la présence d'une liste
if type(element) == list :
# appel de la même fonction avec l'élément actuel comme nouvel argument
flatten_list(element)
else :
flat_list.append(element)
#
aplatissement de la liste donnée
flatten_list(data)
#
impression de la liste plate
print(flat_list)
Rappelez-vous que nous n'avons pas converti la liste existante. Au lieu de cela, nous avons créé une nouvelle liste avec l'élément de liste donné
Conclusion
J'espère que vous avez apprécié ce tuteur. Il peut y avoir beaucoup d'autres façons d'applatir une liste en Python, mais j'ai pensé que les méthodes ci-dessus étaient probablement les plus faciles
Bon codage 🙂 .