Python >> Tutoriel Python >  >> Python

Comment convertir un tuple de tuples en liste de listes en Python ?

💬 Question :étant donné un tuple de tuples tel que ((1, 2), (3, 4)) . Comment le convertir en une liste de listes telles que [[1, 2], [3, 4]] ?

Si vous êtes pressé, voici la manière la plus Pythonique de convertir un tuple imbriqué en une liste imbriquée :

La compréhension de liste instruction [list(x) for x in tuples] convertit chaque tuple en tuples à une liste et stocke les résultats dans une liste de listes.

Mais il y a plus que ça! Étudier les différentes méthodes pour atteindre le même objectif fera de vous un meilleur codeur.

Alors continuez à lire !

Méthode 1 :Compréhension de la liste + list()

La méthode recommandée pour convertir un tuple de tuples en une liste de listes consiste à utiliser la compréhension de liste en combinaison avec le list() intégré fonctionner comme ceci :[list(x) for x in tuples] .

Voici un exemple concret :

tuples = ((1, 2), (3, 4), (5, 6))
lists = [list(x) for x in tuples]

print(lists)
# [[1, 2], [3, 4], [5, 6]]

Essayez-le vous-même :

Cette approche est simple et efficace. La compréhension de la liste définit comment convertir chaque tuple (x dans l'exemple) à un nouvel élément de liste. Comme chaque élément de liste est une nouvelle liste, vous utilisez le constructeur list(x) pour créer une nouvelle liste à partir du tuple x .

Exemple trois éléments par tuple

Si vous avez trois éléments par tuple, vous pouvez utiliser la même approche avec la conversion :

tuples = ((1, 2, 1), (3, 4, 3), (5, 6, 5))
lists = [list(x) for x in tuples]
print(lists)

Vous pouvez voir le flux d'exécution dans la visualisation interactive suivante (cliquez simplement sur le bouton "Suivant" pour voir ce qui se passe dans le code) :

Exemple de nombre variable d'éléments de tuple

Et si vous avez un nombre variable d'éléments par tuple, cette approche fonctionne toujours parfaitement :

tuples = ((1,), (3, 3), (5, 6, 5))
lists = [list(x) for x in tuples]

print(lists)
# [[1], [3, 3], [5, 6, 5]]

Vous voyez qu'une approche avec compréhension de liste est la meilleure façon de convertir un tuple de tuples en une liste de listes.

Mais existe-t-il des alternatives ?

Méthode 2 :Utiliser l'astérisque et la compréhension de la liste

Une variante de la méthode recommandée pour convertir un tuple de tuples en une liste de listes consiste à utiliser la compréhension de liste en combinaison avec l'opérateur astérisque de déballage * comme ceci :[[*x] for x in tuples] .

Voici un exemple :

tuples = ((1,), (3, 3), (5, 6, 5))
lists = [[*x] for x in tuples]

print(lists)
# [[1], [3, 3], [5, 6, 5]]

L'opérateur de déballage [*x] prend tous les éléments de tuple de x et les "déballe" dans le conteneur de liste externe [...] . Par exemple, l'expression [*(5, 6, 5)] donne la liste [5, 6, 5] .

Examinons une approche complètement différente pour résoudre ce problème :

Méthode 3 :fonction de mappage + liste()

Utilisez la fonction map qui applique une fonction spécifiée sur chaque élément d'un itérable.

💡Note complémentaire :Guido van Rossum, le créateur de Python, n'aimait pas le map() fonction car elle est moins lisible et moins efficace que la version en compréhension de liste (Méthode 1 dans ce tutoriel). Vous pouvez lire une discussion détaillée sur la façon exacte dont il a argumenté sur mon article de blog.

Donc, sans plus tarder, voici comment vous pouvez convertir un tuple de tuples en une liste de listes en utilisant le map() fonction :

tuples = ((1,), (2, 3, 4), (5, 6, 7, 8))
lists = list(map(list, tuples))

print(lists)
# [[1], [2, 3, 4], [5, 6, 7, 8]]

Essayez vous-même :

Tutoriel vidéo sur le map() fonction :

Le premier argument du map() la fonction est le list nom de la fonction.

Ce list() la fonction convertit chaque élément sur l'itérable tuples donné (le deuxième argument) dans une liste.

Le résultat du map() La fonction est également un itérable, vous devez donc la convertir en liste avant de l'imprimer dans le shell, car la représentation sous forme de chaîne par défaut d'un itérable n'est pas lisible par l'homme.

Méthode 4 :boucle for simple avec append() et list()

Pour convertir un tuple de tuples en une liste de listes, une simple ligne de trois lignes consiste d'abord à initialiser une liste "externe" vide et à la stocker dans une variable. Ensuite, parcourez tous les tuples en utilisant un simple for bouclez et convertissez chacun séparément en une liste et ajoutez chaque résultat à la variable de liste externe en utilisant le list.append() méthode intégrée dans le corps de la boucle.

L'exemple suivant fait exactement cela :

tuples = ((1,), (2, 3, 4), (5, 6, 7, 8))

lists = []
for t in tuples:
    lists.append(list(t))

print(lists)
# [[1], [2, 3, 4], [5, 6, 7, 8]]

Tutoriel vidéo associé

Articles liés à la conversion

  • Comment convertir une liste de listes en une liste de tuples
  • Comment convertir une liste de listes en une base de données Pandas
  • Comment convertir une liste de listes en un tableau NumPy
  • Comment convertir une liste de listes en dictionnaire en Python