Python >> Tutoriel Python >  >> Python

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

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

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

Utiliser une expression de générateur avec le tuple() intégré fonction pour convertir une liste de listes en un tuple de tuples comme ceci :tuple(tuple(x) for x in my_list) .

Voici un graphique sur la façon de convertir dans les deux sens entre la liste imbriquée et les tuples imbriqués :

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 tuple + tuple()

La méthode recommandée pour convertir une liste de listes en un tuple de tuples consiste à utiliser l'expression du générateur en combinaison avec le tuple() intégré fonctionner comme ceci :tuple(tuple(x) for x in my_list) .

Voici un exemple concret :

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

print(tuples)
# ((1, 2), (3, 4), (5, 6))

Essayez-le vous-même :

Cette approche est simple et efficace. L'expression du générateur définit comment convertir chaque liste interne (x dans l'exemple) à un nouvel élément de tuple.

Vous utilisez le constructeur tuple(x) pour créer un nouveau tuple à partir de la liste x .

Exemple trois éléments par tuple

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

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

print(tuples)
# ((1, 2, 1), (3, 4, 3), (5, 6, 5))

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 liste

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

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

print(tuples)
# ((1,), (2, 4, 3), (6, 5))

Vous voyez qu'une approche avec une expression de générateur est la meilleure façon de convertir une liste de listes en un tuple de tuples.

Mais existe-t-il des alternatives ? Examinons une approche complètement différente pour résoudre ce problème :

Méthode 2 :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 d'expression du générateur (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 une liste de listes en un tuple de tuples en utilisant le map() fonction :

lists = [[1], [2, 4, 3], [6, 5]]
tuples = tuple(map(tuple, lists))

print(tuples)
# ((1,), (2, 4, 3), (6, 5))

Essayez vous-même :

Tutoriel vidéo sur le map() fonction :

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

Ce tuple() la fonction convertit chaque élément sur l'itérable donné lists (le deuxième argument) dans un tuple.

Le résultat du map() La fonction est également un itérable, vous devez donc la convertir en un tuple 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 3 :boucle for simple avec append() et tuple()

Pour convertir une liste de listes en un tuple de tuples, initialisez d'abord une liste "externe" vide et stockez-la dans une variable.

Ensuite, parcourez toutes les listes en utilisant un simple for bouclez et convertissez chacun séparément en un tuple.

Ensuite, 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.

Enfin, convertissez la liste de tuples en une liste de tuples en utilisant le tuple() fonction.

L'exemple suivant fait exactement cela :

lists = [[1], [2, 4, 3], [6, 5]]

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

print(tuples)
# ((1,), (2, 4, 3), (6, 5))

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
  • Comment convertir un tuple de tuples en une liste de listes en Python