Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Python-Iteroitavat: Sekvenssien ja Tietorakenteiden Ymmärtäminen | Iteraattoreiden ja Generaattoreiden Hallinta Pythonissa
Pythonin Rakenteellinen Ohjelmointi

bookPython-Iteroitavat: Sekvenssien ja Tietorakenteiden Ymmärtäminen

Mitä ovat iteroitavat?

Pythonissa iteroitavat ovat olioita, joita voidaan käydä läpi tai silmukoida, palauttaen niiden alkiot yksi kerrallaan. Tämä kyky tuottaa yksi alkio kerrallaan tekee niistä korvaamattomia tehtävissä kuten silmukointi, listan ymmärrys ja purkaminen.

Yleisiä iteroitavia ovat:

  • Tietorakenteet: listat, tuplet, sanakirjat, joukot;
  • Merkkijonot: tuottavat merkkinsä yksi kerrallaan;
  • Omat oliot: voidaan tehdä iteroitaviksi toteuttamalla __iter__-metodi.

Tärkeä piirre iteroitavissa on, että ne eivät itsessään "muista" sijaintiaan läpikäynnin aikana. Jotta niiden alkiot voidaan käydä läpi, ne tarvitsevat iteraattorin.

1234567
numbers = [1, 2, 3, 4] for num in numbers: print(num) title = "codefinity" for char in title: print(char)
copy

for-silmukka käy automaattisesti läpi iteroitavan alkiot ja käsittelee ne yksi kerrallaan.

Kun Python käsittelee iteroitavaa, se muuntaa olion iteraattoriksi käyttämällä iter()-funktiota. Sisäisesti iter() kutsuu olion __iter__()-metodia. Vastaavasti next()-funktio hakee seuraavan arvon iteraattorista kutsumalla sen __next__()-metodia.

Seuraava esimerkki havainnollistaa, miten tämä toimii:

12345678910
numbers = [1, 2, 3, 4] # Converting the list to an iterator numbers_iterator = iter(numbers) # Accessing elements one at a time using `next()` print(next(numbers_iterator)) # Output: 1 print(next(numbers_iterator)) # Output: 2 print(next(numbers_iterator)) # Output: 3 print(next(numbers_iterator)) # Output: 4 print(next(numbers_iterator)) # Output: StopIteration
copy

Iteroitavat vs. iteraattorit

Vaikka kaikki iteraattorit ovat iteroitavia, kaikki iteroitavat eivät ole iteraattoreita. Iteraattori muistaa sijaintinsa läpikäynnin aikana ja tarjoaa pääsyn alkioihin järjestyksessä, kunnes loppu saavutetaan.

Iteroitavien rajoitukset

Kun käsitellään suuria tietoaineistoja, kaikkien alkioiden tallentaminen iteroitavaan, kuten listaan, voi olla tehotonta. Esimerkiksi, jos lukujono luodaan dynaamisesti tai se on liian suuri mahtuakseen muistiin, tarvitaan tapa käsitellä alkioita tarpeen mukaan. Tässä kohtaa iteraattorit (käsitellään seuraavassa luvussa) ja laiska evaluointi (esitellään myöhemmin) ovat keskeisiä.

Tehtävä

Swipe to start coding

Kirjoita Python-skripti, joka simuloi sekoitetun kuusisivuisen nopan heittämistä käyttäen iteraattoreita. Täydennä puuttuvat kohdat koodista luodaksesi iteraattorin, hakeaksesi alkioita next()-funktiolla ja käsitelläksesi iteraation loppumisen hallitusti.

  1. Lista [1, 2, 3, 4, 5, 6] edustaa nopan sivuja. Lista on jo sekoitettu käyttäen random.shuffle()-funktiota.
  2. Muunna sekoitettu lista iteraattoriksi, jotta voit käydä sen alkiot läpi yksi kerrallaan.
  3. Käytä next()-funktiota simuloidaksesi nopan heittoa ja tulosta jokainen sivu, kunnes kaikki sivut on käytetty.
  4. Kun iteraattori on käyty loppuun, käsittele StopIteration-poikkeus osoittaaksesi, että heitot ovat valmiit.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 6. Luku 1
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

Can you explain the difference between an iterable and an iterator in simpler terms?

How do I make my own object iterable in Python?

What happens if I call next() too many times on an iterator?

close

bookPython-Iteroitavat: Sekvenssien ja Tietorakenteiden Ymmärtäminen

Pyyhkäise näyttääksesi valikon

Mitä ovat iteroitavat?

Pythonissa iteroitavat ovat olioita, joita voidaan käydä läpi tai silmukoida, palauttaen niiden alkiot yksi kerrallaan. Tämä kyky tuottaa yksi alkio kerrallaan tekee niistä korvaamattomia tehtävissä kuten silmukointi, listan ymmärrys ja purkaminen.

Yleisiä iteroitavia ovat:

  • Tietorakenteet: listat, tuplet, sanakirjat, joukot;
  • Merkkijonot: tuottavat merkkinsä yksi kerrallaan;
  • Omat oliot: voidaan tehdä iteroitaviksi toteuttamalla __iter__-metodi.

Tärkeä piirre iteroitavissa on, että ne eivät itsessään "muista" sijaintiaan läpikäynnin aikana. Jotta niiden alkiot voidaan käydä läpi, ne tarvitsevat iteraattorin.

1234567
numbers = [1, 2, 3, 4] for num in numbers: print(num) title = "codefinity" for char in title: print(char)
copy

for-silmukka käy automaattisesti läpi iteroitavan alkiot ja käsittelee ne yksi kerrallaan.

Kun Python käsittelee iteroitavaa, se muuntaa olion iteraattoriksi käyttämällä iter()-funktiota. Sisäisesti iter() kutsuu olion __iter__()-metodia. Vastaavasti next()-funktio hakee seuraavan arvon iteraattorista kutsumalla sen __next__()-metodia.

Seuraava esimerkki havainnollistaa, miten tämä toimii:

12345678910
numbers = [1, 2, 3, 4] # Converting the list to an iterator numbers_iterator = iter(numbers) # Accessing elements one at a time using `next()` print(next(numbers_iterator)) # Output: 1 print(next(numbers_iterator)) # Output: 2 print(next(numbers_iterator)) # Output: 3 print(next(numbers_iterator)) # Output: 4 print(next(numbers_iterator)) # Output: StopIteration
copy

Iteroitavat vs. iteraattorit

Vaikka kaikki iteraattorit ovat iteroitavia, kaikki iteroitavat eivät ole iteraattoreita. Iteraattori muistaa sijaintinsa läpikäynnin aikana ja tarjoaa pääsyn alkioihin järjestyksessä, kunnes loppu saavutetaan.

Iteroitavien rajoitukset

Kun käsitellään suuria tietoaineistoja, kaikkien alkioiden tallentaminen iteroitavaan, kuten listaan, voi olla tehotonta. Esimerkiksi, jos lukujono luodaan dynaamisesti tai se on liian suuri mahtuakseen muistiin, tarvitaan tapa käsitellä alkioita tarpeen mukaan. Tässä kohtaa iteraattorit (käsitellään seuraavassa luvussa) ja laiska evaluointi (esitellään myöhemmin) ovat keskeisiä.

Tehtävä

Swipe to start coding

Kirjoita Python-skripti, joka simuloi sekoitetun kuusisivuisen nopan heittämistä käyttäen iteraattoreita. Täydennä puuttuvat kohdat koodista luodaksesi iteraattorin, hakeaksesi alkioita next()-funktiolla ja käsitelläksesi iteraation loppumisen hallitusti.

  1. Lista [1, 2, 3, 4, 5, 6] edustaa nopan sivuja. Lista on jo sekoitettu käyttäen random.shuffle()-funktiota.
  2. Muunna sekoitettu lista iteraattoriksi, jotta voit käydä sen alkiot läpi yksi kerrallaan.
  3. Käytä next()-funktiota simuloidaksesi nopan heittoa ja tulosta jokainen sivu, kunnes kaikki sivut on käytetty.
  4. Kun iteraattori on käyty loppuun, käsittele StopIteration-poikkeus osoittaaksesi, että heitot ovat valmiit.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 6. Luku 1
single

single

some-alt