Einen Python-Iterator rückwärts laufen lassen?
Es ist trotzdem eine python-Liste-iterator, rückwärts zu gehen?
Im Grunde habe ich diese
class IterTest(object):
def __init__(self, data):
self.data = data
self.__iter = None
def all(self):
self.__iter = iter(self.data)
for each in self.__iter:
mtd = getattr(self, type(each).__name__)
mtd(each)
def str(self, item):
print item
next = self.__iter.next()
while isinstance(next, int):
print next
next = self.__iter.next()
def int(self, item):
print "Crap i skipped C"
if __name__ == '__main__':
test = IterTest(['a', 1, 2,3,'c', 17])
test.all()
Läuft dieser code ergibt in der Ausgabe:
a
1
2
3
Crap i skipped C
Weiß ich, warum es gibt mir den Ausgang, jedoch ist es ein Weg, gehe ich einen Schritt rückwärts in der str () - Methode auf, um einen Schritt?
BEARBEITEN
Okay vielleicht, um diese besser klar. Ich will nicht, um eine volle Rückseite, im Grunde, was ich wissen möchte, ob es einen einfachen Weg, um die Entsprechung einer bidirektionale Iteratoren in python?
InformationsquelleAutor der Frage UberJumper | 2010-05-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, im Allgemeinen, Sie können eine Python-iterator rückwärts zu gehen. Allerdings, wenn Sie nur wollen, um einen Schritt zurück, sobald Sie können versuchen, so etwas wie dieses:
Können Sie dann den Zugriff auf das Vorherige element zu jeder Zeit im
prev
.Wenn Sie wirklich brauchen ein bidirektionaler iterator implementieren Sie eine sich selbst, aber es ist wahrscheinlich vorstellen, noch mehr Aufwand als die Lösung oben:
InformationsquelleAutor der Antwort Tamás
Bin ich etwas fehlt oder konnte Sie nicht verwenden, die Technik, beschrieben in der "Iterator" - Abschnitt in der Python-tutorial?
Ich weiß, dass dies nicht zu Fuß den iterator rückwärts, aber ich bin mir ziemlich sicher, dass es keine Möglichkeit gibt, das zu tun, im Allgemeinen. Stattdessen schreiben Sie einen iterator, wandelt einen getrennten Sammlung in umgekehrter Reihenfolge.
Bearbeiten Sie können auch die
rückgängig()
- Funktion, um eine umgekehrte iterator für jede Sammlung, so dass Sie nicht haben, um Ihre eigenen schreiben:InformationsquelleAutor der Antwort D.Shawley
Einen iterator, ist per definition ein Objekt mit der
next()
Methode -- keine Erwähnung vonprev()
zu löschen. So müssen Sie entweder den cache der Ergebnisse, so knnen Sie oder implementieren Sie Ihre iterator, so gibt es Ergebnisse in der Reihenfolge, die Sie Sie sein wünschen.InformationsquelleAutor der Antwort ktdrv
Basierend auf Ihrer Frage, es klingt wie Sie wollen, so etwas wie dieses:
InformationsquelleAutor der Antwort David X
Können Sie wickeln Sie Ihre iterator ein iterator Helfer, um es zu aktivieren, um rückwärts zu gehen. Es speichert die iterierten Werte in einer Sammlung und Wiederverwendung, wenn Sie rückwärts gehen.
Die Nutzung, ähnlich wie diese:
InformationsquelleAutor der Antwort Jonáš Kulhánek
ich denke, thi wird Ihnen helfen, Ihr problem zu lösen
InformationsquelleAutor der Antwort dilshad