Contexte de la question
La fonction zip() est apparue en Python comme un moyen pratique de "coudre" plusieurs séquences en tuples avec des éléments correspondants, obtenant ainsi une sorte de structure "matricielle".
Problème
Une erreur se produit lorsque les développeurs utilisent zip pour des séquences de longueur différente, s'attendant à ce que le résultat soit de la longueur de la plus longue, ou utilisent incorrectement le déballage lors de la conversion inverse.
Solution
zip() prend une ou plusieurs séquences et retourne un itérateur de tuples, où le n-ième tuple contient les n-ièmes éléments de toutes les séquences. L'itération se termine lorsque la séquence la plus courte est épuisée.
Exemple de code:
names = ['John', 'Anna', 'Peter'] ages = [28, 22, 35] grouped = list(zip(names, ages)) print(grouped) # [('John', 28), ('Anna', 22), ('Peter', 35)]
Caractéristiques clés:
Que se passe-t-il si zip reçoit des séquences de longueur différente ?
Le résultat sera de la longueur de la séquence la plus courte. Les autres éléments seront ignorés.
zip([1,2,3], ['a','b']) # [(1,'a'), (2,'b')]
Peut-on "dérouler" zip ? Comment retrouver les séquences d'origine ?
Oui, avec l'opérateur d'étoile de déballage et zip(*iterator):
pairs = [(1, "a"), (2, "b")] numbers, letters = zip(*pairs) print(numbers) # (1, 2)
Quelle est la différence entre zip et itertools.zip_longest ?
zip_longest de itertools fonctionne jusqu'à la plus longue séquence, remplissant les manques avec la valeur fillvalue spécifiée.
from itertools import zip_longest zip_longest([1,2], ['a','b','c'], fillvalue=None) # [(1,'a'), (2,'b'), (None, 'c')]
Nous avons traité des paires d'utilisateurs et de mots de passe via zip, mais les listes se sont avérées de longueurs différentes. Plusieurs utilisateurs n'ont pas été pris en compte à cause du fonctionnement de zip avec la liste courte.
Avantages:
Inconvénients:
Pour combiner les résultats de tests et les noms d'étudiants, nous avons utilisé zip_longest avec fillvalue="n/a", préservant les données de tous les participants.
Avantages:
Inconvénients: