11
votes

Besoin d'ajouter un élément au début d'un itérateur en python

J'ai un programme comme suit: xxx

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?)

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>?


1 commentaires

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.


4 Réponses :


14
votes

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: xxx

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 Suivant (Self.e) au lieu de self.it.next () et définir __ suivant __ au lieu de suivant ).

Modifier : Le PO dit maintenant ce dont ils ont besoin, c'est "jeter l'avant sans consommer". L'emballage est toujours la meilleure option, mais une alternative est la suivante: xxx

ceci ne pas avancer o (N'oubliez pas de l'avancer si et quand vous décidez vous voulez; -).


2 commentaires

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!



3
votes

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.

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 :))?


0 commentaires

1
votes

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 méthode pour dire à la Générateur pour répéter la dernière valeur que celle-ci a donné: xxx


0 commentaires

27
votes

Vous recherchez itheroTools.chain : xxx


0 commentaires