Python Academy · Oppitunti

itertools: äärettömät ja äärelliset iteraattorit

Käyttäkää count-, cycle-, islice-, chain- ja zip_longest-funktioita.

Oppitunti 1/413 vaihetta

itertools: äärettömät ja äärelliset iteraattorit on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mikä itertools on

itertools on vakiokirjaston moduuli, joka tarjoaa muistia säästäviä rakennuspalikoita iteraattoreiden luomiseen. Kaikki funktiot palauttavat iteraattoreita, eivät listoja.

import itertools

# count: infinite counter
for i in itertools.islice(itertools.count(10, 2), 5):
    print(i, end=" ")  # 10 12 14 16 18

count()

count(start, step) tuottaa äärettömän aritmeettisen jonon. Käyttäkää sitä aina yhdessä islice-funktion tai lopetusehdon kanssa.

import itertools

for n in itertools.count(1, 10):
    if n > 40:
        break
    print(n, end=" ")  # 1 11 21 31 41

cycle()

cycle(iterable) toistaa iteroitavaa äärettömästi.

import itertools

colors = itertools.cycle(["red","green","blue"])
for _ in range(7):
    print(next(colors), end=" ")
# red green blue red green blue red

repeat()

repeat(value, times) tuottaa saman arvon times kertaa tai äärettömän monta kertaa, jos times jätetään pois.

import itertools
print(list(itertools.repeat(42, 4)))   # [42, 42, 42, 42]
print(list(map(pow, range(5), itertools.repeat(2))))
# [0, 1, 4, 9, 16]

islice()

islice(it, stop) tai islice(it, start, stop, step) viipaloi iteraattorin materialisoimatta sitä.

import itertools

result = list(itertools.islice(range(100), 2, 10, 2))
print(result)  # [2, 4, 6, 8]

chain()

chain(*iterables) yhdistää useita iteroitavia peräkkäin yhdeksi iteraattoriksi.

import itertools

result = list(itertools.chain([1,2], [3,4], [5]))
print(result)  # [1, 2, 3, 4, 5]

# chain.from_iterable for a list of iterables:
nested = [[1,2],[3,4]]
print(list(itertools.chain.from_iterable(nested)))

zip_longest()

zip_longest yhdistää eripituisten iteroitavien alkiot ja täyttää puuttuvat arvot arvolla fillvalue.

import itertools

a = [1, 2, 3]
b = ["a", "b"]
print(list(itertools.zip_longest(a, b, fillvalue=0)))
# [(1, "a"), (2, "b"), (3, 0)]

dropwhile() ja takewhile()

takewhile(pred, it) tuottaa alkioita niin kauan kuin predikaatti on tosi. dropwhile toimii päinvastoin.

import itertools

nums = [1, 3, 5, 6, 7, 9]
print(list(itertools.takewhile(lambda x: x % 2, nums)))
# [1, 3, 5]

print(list(itertools.dropwhile(lambda x: x % 2, nums)))
# [6, 7, 9]

filterfalse()

filterfalse(pred, it) tuottaa alkiot, joille predikaatti on False — se on filter()-funktion komplementti.

import itertools

evens = list(itertools.filterfalse(lambda x: x%2, range(10)))
print(evens)  # [0, 2, 4, 6, 8]

starmap()

starmap(func, iterable) soveltaa funktiota kuhunkin iteroitavasta saatavaan argumenttituplaan.

import itertools, operator

pairs = [(2,3),(4,5),(1,10)]
result = list(itertools.starmap(operator.mul, pairs))
print(result)  # [6, 20, 10]

groupby()

groupby(it, key) ryhmittelee peräkkäiset alkiot, joilla on sama avainarvo. Lajitelkaa iteroitava ensin, jotta ryhmittely onnistuu oikein.

import itertools

data = sorted([("a",1),("b",2),("a",3)], key=lambda x:x[0])
for key, group in itertools.groupby(data, key=lambda x:x[0]):
    print(key, list(group))

Pikatarkistus

Mitä itertools.chain([1,2], [3,4]) tuottaa?

Kertaus

itertools tarjoaa äärettömiä iteraattoreita (count, cycle, repeat), viipalointia (islice), yhdistämistä (chain, zip_longest) ja suodatusta (takewhile, dropwhile, filterfalse). Kaikki ovat laiskoja ja muistia säästäviä.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”itertools: äärettömät ja äärelliset iteraattorit” ilmainen?

Kyllä – oppitunnin ”itertools: äärettömät ja äärelliset iteraattorit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”itertools: äärettömät ja äärelliset iteraattorit”?

Käyttäkää count-, cycle-, islice-, chain- ja zip_longest-funktioita. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”itertools: äärettömät ja äärelliset iteraattorit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. itertools: äärettömät ja äärelliset iteraattorit
  2. itertools: kombinatoriikka
  3. functools: partial ja reduce
  4. functools: lru_cache ja cached_property
← Takaisin: Python Academy