Comment compresser deux listes en Python



Souvent, vous pourriez être intéressé par la compression (ou la « fusion ») de deux listes en Python. Heureusement, cela est facile à faire en utilisant la fonction zip().

Ce tutoriel montre plusieurs exemples d’utilisation pratique de cette fonction.

Exemple 1 : compresser deux listes de longueur égale en une seule liste

La syntaxe suivante montre comment compresser deux listes de longueur égale en une seule :

#define list a and list b
a = ['a', 'b', 'c']
b = [1, 2, 3]

#zip the two lists together into one list
list(zip(a, b))

[('a', 1), ('b', 2), ('c', 3)]

Exemple 2 : compresser deux listes de longueur égale dans un dictionnaire

La syntaxe suivante montre comment compresser deux listes de longueur égale dans un dictionnaire :

#define list of keys and list of values 
keys = ['a', 'b', 'c']
values = [1, 2, 3]

#zip the two lists together into one dictionary
dict(zip(keys, values)) 

{'a': 1, 'b': 2, 'c': 3}

Exemple 3 : compresser deux listes de longueur inégale

Si vos deux listes ont des longueurs inégales, zip() sera tronqué à la longueur de la liste la plus courte :

#define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together into one list
list(zip(a, b))

[('a', 1), ('b', 2), ('c', 3)]

Si vous souhaitez empêcher zip() de tronquer à la longueur de la liste la plus courte, vous pouvez plutôt utiliser la fonction zip_longest() de la bibliothèque itertools .

Par défaut, cette fonction remplit la valeur « Aucune » pour les valeurs manquantes :

from itertools import zip_longest

#define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together without truncating to length of shortest list
list(zip_longest(a, b))

[('a', 1), ('b', 2), ('c', 3), ('d', None)]

Cependant, vous pouvez utiliser l’argument fillvalue pour spécifier une valeur de remplissage différente à utiliser :

#define list a and list b
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3]

#zip the two lists together, using fill value of '0'
list(zip_longest(a, b, fillvalue=0))

[('a', 1), ('b', 2), ('c', 3), ('d', 0)]

Vous pouvez trouver la documentation complète de la fonction zip_longest() ici .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *