Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verständnis von Iteratoren in Python | Iteratoren und Generatoren
Python Fortgeschrittene Konzepte

bookVerständnis von Iteratoren in Python

Was sind Iteratoren?

Technisch gesehen ist ein Iterator in Python ein Objekt, das das Iterator-Protokoll implementiert, welches aus den folgenden Methoden besteht:

  • __iter__(): Gibt das Iterator-Objekt selbst zurück und macht es mit Schleifen wie for kompatibel;
  • __next__(): Gibt das nächste Element in der Sequenz zurück. Wenn keine Elemente mehr vorhanden sind, wird eine StopIteration-Ausnahme ausgelöst, um das Ende der Iteration anzuzeigen.

Ein Iterator ermöglicht das Durchlaufen von Elementen in einem Iterable (z. B. Liste oder Zeichenkette) einzeln und behält dabei seine aktuelle Position bei.

iterator = iter(iterable)

Hinweis

Ein Iterator ist auch ein Iterable, da er die Methode __iter__() implementiert.

Nicht alle Iterables sind Iteratoren. Zum Beispiel ist eine Liste ein Iterable, aber kein Iterator. Wenn Sie sie an die Funktion iter() übergeben, erhalten Sie einen Iterator, der das elementweise Durchlaufen ermöglicht.

Erstellen eines benutzerdefinierten Iterators

Dieser Iterator erzeugt eine feste Anzahl von zufälligen Würfelergebnissen und stoppt, sobald alle Würfe abgeschlossen sind.

123456789101112131415161718192021222324252627
import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
copy

Erschöpfung von Iteratoren

Sobald ein Iterator erschöpft ist, kann er nicht erneut verwendet werden, ohne ihn neu zu erstellen. Zum Beispiel:

12345678910
numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
copy

Iteratoren können nur einmal durchlaufen werden. Um erneut zu iterieren, muss ein neuer Iterator erstellt werden.

Aufgabe

Swipe to start coding

Vervollständigen Sie die fehlenden Teile des Codes, um eine eigene Iterator-Klasse zur Simulation eines unendlichen Würfelrollers zu implementieren. Der Iterator soll zufällig Würfe eines sechsseitigen Würfels erzeugen und nach 10 Würfen stoppen.

  1. Die Methode __iter__() ermöglicht es, ein Objekt als Iterator zu verwenden.
  2. Die Methode __next__() erzeugt den nächsten zufälligen Würfelwurf (eine Zahl zwischen 1 und 6).
  3. Erstellen Sie eine Instanz der Klasse InfiniteDie, die den Würfelroller repräsentiert.
  4. Verwenden Sie eine for-Schleife mit enumerate(), um den Würfel lazy zu werfen. Stoppen Sie nach 10 Würfen mit einer if-Bedingung und der break-Anweisung.

Lösung

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 6. Kapitel 2
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

close

Awesome!

Completion rate improved to 3.13

bookVerständnis von Iteratoren in Python

Swipe um das Menü anzuzeigen

Was sind Iteratoren?

Technisch gesehen ist ein Iterator in Python ein Objekt, das das Iterator-Protokoll implementiert, welches aus den folgenden Methoden besteht:

  • __iter__(): Gibt das Iterator-Objekt selbst zurück und macht es mit Schleifen wie for kompatibel;
  • __next__(): Gibt das nächste Element in der Sequenz zurück. Wenn keine Elemente mehr vorhanden sind, wird eine StopIteration-Ausnahme ausgelöst, um das Ende der Iteration anzuzeigen.

Ein Iterator ermöglicht das Durchlaufen von Elementen in einem Iterable (z. B. Liste oder Zeichenkette) einzeln und behält dabei seine aktuelle Position bei.

iterator = iter(iterable)

Hinweis

Ein Iterator ist auch ein Iterable, da er die Methode __iter__() implementiert.

Nicht alle Iterables sind Iteratoren. Zum Beispiel ist eine Liste ein Iterable, aber kein Iterator. Wenn Sie sie an die Funktion iter() übergeben, erhalten Sie einen Iterator, der das elementweise Durchlaufen ermöglicht.

Erstellen eines benutzerdefinierten Iterators

Dieser Iterator erzeugt eine feste Anzahl von zufälligen Würfelergebnissen und stoppt, sobald alle Würfe abgeschlossen sind.

123456789101112131415161718192021222324252627
import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
copy

Erschöpfung von Iteratoren

Sobald ein Iterator erschöpft ist, kann er nicht erneut verwendet werden, ohne ihn neu zu erstellen. Zum Beispiel:

12345678910
numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
copy

Iteratoren können nur einmal durchlaufen werden. Um erneut zu iterieren, muss ein neuer Iterator erstellt werden.

Aufgabe

Swipe to start coding

Vervollständigen Sie die fehlenden Teile des Codes, um eine eigene Iterator-Klasse zur Simulation eines unendlichen Würfelrollers zu implementieren. Der Iterator soll zufällig Würfe eines sechsseitigen Würfels erzeugen und nach 10 Würfen stoppen.

  1. Die Methode __iter__() ermöglicht es, ein Objekt als Iterator zu verwenden.
  2. Die Methode __next__() erzeugt den nächsten zufälligen Würfelwurf (eine Zahl zwischen 1 und 6).
  3. Erstellen Sie eine Instanz der Klasse InfiniteDie, die den Würfelroller repräsentiert.
  4. Verwenden Sie eine for-Schleife mit enumerate(), um den Würfel lazy zu werfen. Stoppen Sie nach 10 Würfen mit einer if-Bedingung und der break-Anweisung.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 6. Kapitel 2
single

single

some-alt