362 votes

Comment fusionner des listes en une liste de tuples ?

Quelle est l'approche pythonique pour réaliser ce qui suit ?

# Original lists:

list_a = [1, 2, 3, 4]
list_b = [5, 6, 7, 8]

# List of tuples from 'list_a' and 'list_b':

list_c = [(1,5), (2,6), (3,7), (4,8)]

Chaque membre de list_c est un tuple, dont le premier membre provient de list_a et le second est de list_b .

548voto

YOU Points 44812

Dans Python 2 :

>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> zip(list_a, list_b)
[(1, 5), (2, 6), (3, 7), (4, 8)]

Dans Python 3 :

>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> list(zip(list_a, list_b))
[(1, 5), (2, 6), (3, 7), (4, 8)]

94 votes

Il faut savoir que la fonction zip s'arrête à la fin de la liste la plus courte, ce qui n'est pas toujours ce que l'on souhaite. la fonction itertools définit un module zip_longest() qui s'arrête à la fin de la liste la plus longue, en remplissant les valeurs manquantes avec quelque chose que vous fournissez comme paramètre.

6 votes

@Adrien : merci pour votre commentaire pertinent. Pour Python 2.x, s/zip_longest()/izip_longest() . Renommé dans Python 3.x en zip_longest() .

0 votes

Puis-je créer [(1,5), (1,6), (1,7), (1,8), (2,5), (2,6) ,etc.] en utilisant la commande zip ?

147voto

Lodewijk Points 283

En python 3.0, zip renvoie un objet zip. Vous pouvez obtenir une liste de celui-ci en appelant list(zip(a, b)) .

3 votes

Cela pourrait être trivial, mais sachez que l'utiliser directement dans une boucle for vous donne un générateur qui sera épuisé après une seule utilisation. Enregistrez-la dans une variable si vous voulez l'utiliser plus souvent.

16voto

Dark Knight Points 709

Vous pouvez utiliser map lambda

a = [2,3,4]
b = [5,6,7]
c = map(lambda x,y:(x,y),a,b)

Cela fonctionnera également si les longueurs des listes originales ne correspondent pas.

8voto

Mizipzor Points 10952

Vous recherchez la fonction intégrée zip .

7voto

Vipin Points 21

Je ne sais pas si c'est une méthode pythonique ou non mais cela semble simple si les deux listes ont le même nombre d'éléments :

list_a = [1, 2, 3, 4]

list_b = [5, 6, 7, 8]

list_c=[(list_a[i],list_b[i]) for i in range(0,len(list_a))]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X