Iteraattoreiden Ymmärtäminen Pythonissa
Mitä ovat iteraattorit?
Teknisesti Pythonissa iteraattori on olio, joka toteuttaa iteraattoriprotokollan, johon kuuluu seuraavat metodit:
__iter__(): palauttaa itse iteraattoriolion, jolloin se on yhteensopiva esimerkiksifor-silmukoiden kanssa;__next__(): palauttaa seuraavan alkion sekvenssistä. Kun alkioita ei ole enää jäljellä, se nostaaStopIteration-poikkeuksen ilmaistakseen läpikäynnin päättymisen.
Iteraattorin avulla voidaan käydä läpi iteroitavan (esim. lista tai merkkijono) alkioita yksi kerrallaan ja samalla seurata nykyistä sijaintia.
iterator = iter(iterable)
Huom
Iteraattori on myös iteroitava, koska se toteuttaa
__iter__()-metodin.Kaikki iteroitavat eivät ole iteraattoreita. Esimerkiksi lista on iteroitava, mutta ei iteraattori. Kun välität sen
iter()-funktiolle, saat iteraattorin, jonka avulla voit käydä läpi alkioita yksi kerrallaan.
Oman iteraattorin rakentaminen
Tämä iteraattori arpoo ennalta määrätyn määrän noppien heittoja ja pysähtyy, kun kaikki heitot on suoritettu.
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}")
Iteraattorin tyhjentyminen
Kun iteraattori on tyhjentynyt, sitä ei voi käyttää uudelleen ilman, että se luodaan uudestaan. Esimerkiksi:
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.
Iteraattorit voidaan käydä läpi vain kerran. Jos halutaan iteroida uudelleen, täytyy luoda uusi iteraattori.
Swipe to start coding
Täydennä puuttuvat osat koodista toteuttaaksesi oman iteraattoriluokan, joka simuloi ääretöntä nopanheittoa. Iteraattorin tulee laiskasti tuottaa satunnaisia heittoja kuusisivuisella nopalla ja pysähtyä 10 heiton jälkeen.
__iter__()-metodi mahdollistaa olion käyttämisen iteraattorina.__next__()-metodi tuottaa seuraavan satunnaisen nopanheiton (luku väliltä 1–6).- Luo
InfiniteDie-luokan ilmentymä, joka edustaa nopanheitintä. - Käytä for-silmukkaa yhdessä
enumerate()-funktion kanssa heittääksesi noppaa laiskasti. Pysäytä silmukka 10 heiton jälkeen käyttämällä if-ehtoa ja break-lausetta.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain the difference between an iterator and an iterable in more detail?
How can I create my own custom iterator for a different use case?
What happens if I try to use an exhausted iterator again?
Mahtavaa!
Completion arvosana parantunut arvoon 3.13
Iteraattoreiden Ymmärtäminen Pythonissa
Pyyhkäise näyttääksesi valikon
Mitä ovat iteraattorit?
Teknisesti Pythonissa iteraattori on olio, joka toteuttaa iteraattoriprotokollan, johon kuuluu seuraavat metodit:
__iter__(): palauttaa itse iteraattoriolion, jolloin se on yhteensopiva esimerkiksifor-silmukoiden kanssa;__next__(): palauttaa seuraavan alkion sekvenssistä. Kun alkioita ei ole enää jäljellä, se nostaaStopIteration-poikkeuksen ilmaistakseen läpikäynnin päättymisen.
Iteraattorin avulla voidaan käydä läpi iteroitavan (esim. lista tai merkkijono) alkioita yksi kerrallaan ja samalla seurata nykyistä sijaintia.
iterator = iter(iterable)
Huom
Iteraattori on myös iteroitava, koska se toteuttaa
__iter__()-metodin.Kaikki iteroitavat eivät ole iteraattoreita. Esimerkiksi lista on iteroitava, mutta ei iteraattori. Kun välität sen
iter()-funktiolle, saat iteraattorin, jonka avulla voit käydä läpi alkioita yksi kerrallaan.
Oman iteraattorin rakentaminen
Tämä iteraattori arpoo ennalta määrätyn määrän noppien heittoja ja pysähtyy, kun kaikki heitot on suoritettu.
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}")
Iteraattorin tyhjentyminen
Kun iteraattori on tyhjentynyt, sitä ei voi käyttää uudelleen ilman, että se luodaan uudestaan. Esimerkiksi:
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.
Iteraattorit voidaan käydä läpi vain kerran. Jos halutaan iteroida uudelleen, täytyy luoda uusi iteraattori.
Swipe to start coding
Täydennä puuttuvat osat koodista toteuttaaksesi oman iteraattoriluokan, joka simuloi ääretöntä nopanheittoa. Iteraattorin tulee laiskasti tuottaa satunnaisia heittoja kuusisivuisella nopalla ja pysähtyä 10 heiton jälkeen.
__iter__()-metodi mahdollistaa olion käyttämisen iteraattorina.__next__()-metodi tuottaa seuraavan satunnaisen nopanheiton (luku väliltä 1–6).- Luo
InfiniteDie-luokan ilmentymä, joka edustaa nopanheitintä. - Käytä for-silmukkaa yhdessä
enumerate()-funktion kanssa heittääksesi noppaa laiskasti. Pysäytä silmukka 10 heiton jälkeen käyttämällä if-ehtoa ja break-lausetta.
Ratkaisu
Kiitos palautteestasi!
single