Un guide pour aplatir la liste et la liste des listes en Python

La conversion d’un tableau 2D en un tableau 1D s’appelle l’aplatissement. Il existe de nombreuses approches pour résoudre le problème.

Nous en explorerons quelques-uns dans ce tutoriel.

Voyons un exemple.

Saisir

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

Production

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

#1. Boucles

La façon la plus courante de résoudre le problème consiste à 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 factices et nommez-la en tant que données.
  • Maintenant, initialisez une liste vide appelée flat_list.
  • Itérer sur les données.
    • Décompressez tous les éléments de la liste actuelle.
    • Ajoutez-les à la flat_list en utilisant la méthode list append.
  • Imprimez le résultat.

Voir le code du problème ci-dessous.

# initializing the data and an empty list
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# iterating over the data
for item in data:
    # appending elements to the flat_list
    flat_list += item

# printing the resultantn flat_list
print(flat_list)

Vous pouvez utiliser une autre boucle pour ajouter des éléments de sous-liste à flat_list 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 la prochaine façon de résoudre le problème.

#2. Itertools – Chaîne

Nous utiliserons une méthode appelée chaîne du module intégré itertools.

La chaîne de méthodes itère sur chaque sous-liste et renvoie les éléments jusqu’à ce qu’il n’y ait plus de sous-listes. Il renvoie un itérable que nous devons convertir en liste.

Voyons les étapes impliquées dans la résolution du problème.

  • Initialisez la liste des listes avec des données factices et nommez-la en tant que données.
  • Obtenez l’itérable aplati à l’aide de itertools.chain(*data).
  • Convertir l’itérable résultant en une liste.
  • Imprimez la liste aplatie.

Vous pouvez parcourir le code dans l’extrait ci-dessous.

# importing the module
import itertools

# initializing the data
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# flattening the list and storing the result
flat_list = itertools.chain(*data)

# converting iterable to list and printing
print(list(flat_list))

#3. Aplatir les listes à plusieurs niveaux

Nous avons vu comment aplatir une liste de listes. Les méthodes ci-dessus dont nous avons discuté pour aplatir la liste ne fonctionneront pas pour les listes à plusieurs niveaux. Voyons un exemple.

Saisir

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

Production

[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 en tant que données.
  • Initialisez une liste vide appelée flat_list.
  • Écrivez une fonction appelée flatten_list.
    • Itérer sur les éléments de la liste donnée.
    • Si l’élément est une liste, appelez à nouveau récursivement la même fonction.
    • Si l’élément n’est pas une liste, ajoutez l’élément à flat_list.
  • Appelez la fonction avec des données.
  • La fonction remplira tous les éléments de la liste flat_list.
  • Imprimez la flat_list pour vérifier la sortie.

Phew! beaucoup d’étapes à coder. Ne vous inquiétez pas. La conversion des instructions ci-dessus en code ne prendra pas plus de minutes.

# initializing the data and empty list
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# function
def flatten_list(data):
    # iterating over the data
    for element in data:
        # checking for list
        if type(element) == list:
            # calling the same function with current element as new argument
            flatten_list(element)
        else:
            flat_list.append(element)

# flattening the given list
flatten_list(data)

# printing the flat_list
print(flat_list)

N’oubliez pas 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é le tutoriel. Il pourrait y avoir de nombreuses autres façons d’aplatir une liste en Python, mais j’ai pensé que ce qui précède est probablement le plus simple.

Bon codage 🙂

x