Maison >développement back-end >Tutoriel Python >Au-delà de la fermeture éclair d'un manteau : maîtriser zip_longest en Python
Je parie que vous avez probablement rencontré la frustration de perdre des données en essayant de compresser deux listes de longueurs différentes en Python.
itertools.zip_longest est là pour sauver la situation. Ici, je veux explorer comment utiliser zip_longest(), le comparer avec le zip standard et me plonger dans un scénario pratique où il brille.
La fonction zip_longest() du module itertools en Python vous permet de compresser plusieurs itérables, en remplissant les plus courts avec une valeur spécifiée (par défaut). Cela garantit qu'aucune donnée n'est perdue, même si les itérables sont de longueurs différentes.
Considérez un scénario dans lequel vous essayez de placer des étudiants dans une salle de classe, mais le nombre d'étudiants et le nombre de pupitres disponibles ne correspondent pas. Vous voulez vous assurer que chaque élève dispose d'un siège et que chaque siège est occupé autant que possible.
Si vous utilisez zip(), dès que vous manquez d'élèves ou de pupitres, l'appairage s'arrête. Cela signifie que certains bureaux peuvent rester vides ou que certains étudiants peuvent rester debout.
Avec zip_longest(), vous pouvez associer chaque élève à un bureau, et si vous manquez de pupitres, vous pouvez noter que les élèves supplémentaires doivent se lever. Alternativement, s'il y a plus de pupitres que d'étudiants, vous pouvez marquer les pupitres supplémentaires comme « vides ». Chaque élève est comptabilisé et vous savez exactement quels bureaux restent inoccupés.
Prenons un exemple où le nombre de bureaux dépasse le nombre d'étudiants, en utilisant à la fois zip() et zip_longest().
students = ['Alice', 'Bob'] desks = ['Desk 1', 'Desk 2', 'Desk 3'] # Using zip to pair students with desks seating_zip = list(zip(students, desks)) print("Seating with zip:") for student, desk in seating_zip: print(f"{student} is assigned to {desk}")
Sortie :
Seating with zip: Alice is assigned to Desk 1 Bob is assigned to Desk 2
Avec zip(), l'appairage s'arrête dès que la liste la plus courte (étudiants) est épuisée. Le bureau 3 n’est toujours pas attribué et rien n’indique qu’il est inutilisé.
from itertools import zip_longest students = ['Alice', 'Bob'] desks = ['Desk 1', 'Desk 2', 'Desk 3'] # Using zip_longest to pair students with desks seating_zip_longest = list(zip_longest(students, desks, fillvalue='Empty Seat')) print("\nSeating with zip_longest:") for student, desk in seating_zip_longest: print(f"{student} is assigned to {desk}")
Sortie :
Seating with zip_longest: Alice is assigned to Desk 1 Bob is assigned to Desk 2 Empty Seat is assigned to Desk 3
Avec zip_longest(), chaque bureau est pris en compte, même s'il n'y a pas assez d'étudiants pour occuper tous les sièges. Dans ce cas, le bureau 3 est associé à « Siège vide » indiquant que ce bureau reste inoccupé. Cette approche est particulièrement utile lorsque vous devez garder une trace de toutes les ressources, en vous assurant que rien n'est oublié.
? Avantages de zip_longest() :
Préserve les données : Garantit qu'aucune donnée n'est perdue en remplissant des itérables plus courts.
Flexibilité : Permet de spécifier une valeur de remplissage personnalisée.
Appairage complet : utile dans les tâches de traitement de données où l'alignement d'itérables de différentes longueurs est nécessaire.
? Inconvénients de zip_longest() :
Le remplissage peut être indésirable : Dans certains cas, le remplissage peut introduire une complexité inutile.
Utilisation de la mémoire : Peut utiliser plus de mémoire s'il s'agit de grands itérables et de grandes valeurs de remplissage.
? Avantages de zip() :
Simple et efficace : Fonctionne bien avec des itérables de longueur égale.
Moins d'utilisation de la mémoire : Aucun remplissage signifie potentiellement moins de surcharge de mémoire.
? Inconvénients de zip() :
Perte de données : Tronque à l'itérable le plus court, perdant ainsi les données des itérables plus longs.
zip_longest() est un outil puissant dans l'arsenal de Python, en particulier lorsque vous travaillez avec des itérables de différentes longueurs. Il garantit l'intégrité des données en remplissant les valeurs manquantes, ce qui le rend idéal pour diverses tâches de traitement de données. Alors que zip() est plus simple et plus économe en mémoire, zip_longest() offre la flexibilité nécessaire dans de nombreux scénarios pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!