Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Förståelse av Iteratorer i Python | Bemästra Iteratorer och Generatorer i Python
Python Strukturell Programmering

bookFörståelse av Iteratorer i Python

Vad är iteratorer?

Tekniskt sett är en iterator i Python ett objekt som implementerar iteratorprotokollet, vilket består av följande metoder:

  • __iter__(): returnerar själva iteratorobjektet, vilket gör det kompatibelt med loopar som for;
  • __next__(): returnerar nästa element i sekvensen. När inga element återstår, kastas ett StopIteration-undantag för att signalera slutet på traverseringen.

En iterator möjliggör traversering av element i en iterable (t.ex. lista eller sträng) ett i taget samtidigt som dess position hålls uppdaterad.

iterator = iter(iterable)

Obs

En iterator är också en iterable eftersom den implementerar metoden __iter__().

Alla iterables är inte iteratorer. Till exempel är en lista iterable men inte en iterator. När du skickar den till funktionen iter() får du en iterator som möjliggör traversering element för element.

Skapa en egen iterator

Denna iterator genererar ett fast antal slumpmässiga tärningskast och avslutas när alla kast är genomförda.

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

Uttömning av iterator

När en iterator har uttömts kan den inte återanvändas utan att återskapas. Till exempel:

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

Iteratorer kan endast traverseras en gång. För att iterera igen måste en ny iterator skapas.

Uppgift

Swipe to start coding

Fyll i de saknade delarna av koden för att implementera en egen iterator-klass som simulerar en oändlig tärningskastare. Iteratorn ska generera slumptal för ett sexsidigt tärningskast på ett så kallat "lazily" sätt och avsluta efter 10 kast.

  1. Metoden __iter__() gör det möjligt att använda objektet som en iterator.
  2. Metoden __next__() genererar nästa slumptal för tärningskastet (ett tal mellan 1 och 6).
  3. Skapa en instans av klassen InfiniteDie, som representerar tärningskastaren.
  4. Använd en for-loop med enumerate() för att kasta tärningen på ett lazily sätt. Avsluta efter 10 kast med hjälp av en if-sats och break.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 6. Kapitel 2
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

close

bookFörståelse av Iteratorer i Python

Svep för att visa menyn

Vad är iteratorer?

Tekniskt sett är en iterator i Python ett objekt som implementerar iteratorprotokollet, vilket består av följande metoder:

  • __iter__(): returnerar själva iteratorobjektet, vilket gör det kompatibelt med loopar som for;
  • __next__(): returnerar nästa element i sekvensen. När inga element återstår, kastas ett StopIteration-undantag för att signalera slutet på traverseringen.

En iterator möjliggör traversering av element i en iterable (t.ex. lista eller sträng) ett i taget samtidigt som dess position hålls uppdaterad.

iterator = iter(iterable)

Obs

En iterator är också en iterable eftersom den implementerar metoden __iter__().

Alla iterables är inte iteratorer. Till exempel är en lista iterable men inte en iterator. När du skickar den till funktionen iter() får du en iterator som möjliggör traversering element för element.

Skapa en egen iterator

Denna iterator genererar ett fast antal slumpmässiga tärningskast och avslutas när alla kast är genomförda.

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

Uttömning av iterator

När en iterator har uttömts kan den inte återanvändas utan att återskapas. Till exempel:

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

Iteratorer kan endast traverseras en gång. För att iterera igen måste en ny iterator skapas.

Uppgift

Swipe to start coding

Fyll i de saknade delarna av koden för att implementera en egen iterator-klass som simulerar en oändlig tärningskastare. Iteratorn ska generera slumptal för ett sexsidigt tärningskast på ett så kallat "lazily" sätt och avsluta efter 10 kast.

  1. Metoden __iter__() gör det möjligt att använda objektet som en iterator.
  2. Metoden __next__() genererar nästa slumptal för tärningskastet (ett tal mellan 1 och 6).
  3. Skapa en instans av klassen InfiniteDie, som representerar tärningskastaren.
  4. Använd en for-loop med enumerate() för att kasta tärningen på ett lazily sätt. Avsluta efter 10 kast med hjälp av en if-sats och break.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 6. Kapitel 2
single

single

some-alt