Fö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 somfor;__next__(): returnerar nästa element i sekvensen. När inga element återstår, kastas ettStopIteration-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.
123456789101112131415161718192021222324252627import 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}")
Uttömning av iterator
När en iterator har uttömts kan den inte återanvändas utan att återskapas. Till exempel:
12345678910numbers = [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.
Iteratorer kan endast traverseras en gång. För att iterera igen måste en ny iterator skapas.
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.
- Metoden
__iter__()gör det möjligt att använda objektet som en iterator. - Metoden
__next__()genererar nästa slumptal för tärningskastet (ett tal mellan 1 och 6). - Skapa en instans av klassen
InfiniteDie, som representerar tärningskastaren. - 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
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Fantastiskt!
Completion betyg förbättrat till 3.13
Fö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 somfor;__next__(): returnerar nästa element i sekvensen. När inga element återstår, kastas ettStopIteration-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.
123456789101112131415161718192021222324252627import 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}")
Uttömning av iterator
När en iterator har uttömts kan den inte återanvändas utan att återskapas. Till exempel:
12345678910numbers = [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.
Iteratorer kan endast traverseras en gång. För att iterera igen måste en ny iterator skapas.
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.
- Metoden
__iter__()gör det möjligt att använda objektet som en iterator. - Metoden
__next__()genererar nästa slumptal för tärningskastet (ett tal mellan 1 och 6). - Skapa en instans av klassen
InfiniteDie, som representerar tärningskastaren. - 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
Tack för dina kommentarer!
single