J'ai un programme comme suit: Comment puis-je ajouter un élément au début de l'itérateur?
(Ou existe-t-il un moyen plus facile de faire cela?) P> EDIT: OK Permettez-moi de le mettre de cette façon. J'ai besoin de l'élément suivant dans un itérateur sans le retirer.
Comment puis-je faire cela>? P> P>
4 Réponses :
Les itérateurs de Python, en tant que tels, ont une fonctionnalité très limitée - pas de "Ajout" ou de quoi que ce soit comme ça. Vous devrez envelopper l'itérateur générique dans une enveloppe en ajoutant cette fonctionnalité. Par exemple: c'est Python 2.5 (devrait fonctionner en 2,6) - de légères variantes conseillées pour 2,6 et obligatoire pour 3. Nany (Utiliser ceci ne pas avancer Suivant (Self.e) code> au lieu de
self.it.next () code> et définir
__ suivant __ code> au lieu de
suivant code>). p>
o code> (N'oubliez pas de l'avancer si et quand vous décidez vous voulez; -). p> p>
Oui. Ce sera le problème.Le problème est que l'itérateur est assez vaste mais s'il n'y a pas d'autre moyen, cela devra faire pour l'instant
Pas d'inquiétude - l'itérateur est tenu par référence dans le boîtier de wrapper, et itheroTools.tee consommera un espace supplémentaire O (k) où K est le nombre d'éléments dont vous avez besoin pour piquer à venir. Alors "grands itérateurs" ne sont pas un problème!
Par conception (dans les concepts de développement général) Les itérateurs sont destinés à être en lecture seule et à toute tentative de modification de ceux-ci. p>
Alternativement, vous pouvez lire l'itérateur en arrière et l'ajouter à la fin de l'élément HTE (qui est en fait le début :))? p>
Ce n'est pas trop proche de ce que vous avez demandé, mais si vous avez le contrôle de la génératrice et que vous n'avez pas besoin de "jeter un coup d'œil" avant que la valeur ne soit générée (et que tous les effets secondaires se produisent), vous pouvez utiliser le générateur.send code>
méthode pour dire à la Générateur pour répéter la dernière valeur que celle-ci a donné:
Vous faites soit une enveloppe exactement comme je l'ai expliquée dans ma réponse ou utilisez iterools.tee, laissez-moi éditer ma réponse.